2016-12-05 64 views
0

我想在異步方法調用之前在gwt中獲取URL的HTTP響應在gwt的異步調用之前獲取HTTP響應

下面是我的工作代碼,但我想在異步調用之前執行它。

RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "http://localhost:8080"); 
    try { 
     builder.sendRequest(null, new RequestCallback() { 
      @Override 
      public void onResponseReceived(Request request, Response response) { 

      } 

      @Override 
      public void onError(Request request, Throwable exception) { 
       throw new UnsupportedOperationException("Not supported yet."); 
      } 
     }); 
    } catch (RequestException ex) { 

    } 
    return response.getStatusCode(); 

另外請注意,我在我的項目中使用的JavaScript 。有什麼辦法可以在javaScript中編寫這段代碼,並在我的OnModuleLoad方法中檢索響應

任何建議將不勝感激。

+0

您可以使用JavaScript/jQuery的承諾。 的Javascript承諾:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise jQuery的承諾: https://api.jquery.com/promise/ –

+1

但即使您在調用RequestCallback(asyc)之前訪問(獲取)getStatusCode值,該值將無關緊要,可能是基本類型的默認值。您應該等到實際響應收到或失敗,並且由於javascript是單線程的,您不能阻止等待,您只能等待使用回調。但是,正如@MaheshGosemath所說,你可以使用異步包裝作爲[Promise](https://github.com/gwtquery/gwtquery)或[Observable](https://github.com/intendia-oss/rxjava-gwt )。 –

+0

我從客戶端調用api。但我必須驗證它到服務器端。所以我做了servlet並從javascript驗證它。解決了 :-) –

回答

0

我在javascript中使用了簡單函數async:false。然後我打了網址並得到迴應。

此響應將採用本地方法在onModuleLoad中執行。同步呼叫。

解決:-)