2013-10-29 133 views
0

這實際上是一個關於Javascript範圍和函數的問題,所以我很抱歉,因爲我是JS的新手!從Javascript函數調用返回值

我有一段javascript代碼,連接創建一個HTTPClient連接到Vertx的REST服務 - 這一切都沒問題。

我的問題是,我需要進入「狀態」和「數據」的代碼從這個調用的「client.request」外返回

// Create the HTTP Client 
var client = vertx.createHttpClient().host(host).port(ssl_port).ssl(true); 


var request = client.request("POST", "/api/en/v1.0/authentication/token/new" + "?login_id=" + login_id + "&api_key=" + api_key, function(resp) { 

    //console.log("Got a response: " + resp.statusCode()); 
    resp.bodyHandler(function(body) { 
     // Parse the JSON string into a new object. 
     var response = JSON.parse(body); 
     console.log("status : " + response.status); 
     console.log("data : " + response.data); 
    }) 
}); 


request.end(); 

所以到這裏我想使用/訪問「狀態」和「數據」。在另一種語言中,我只是將它們作爲對象返回到調用堆棧中。

+2

@Matt:我正在考慮將標題(和答案)更改爲通用,針對異步函數調用。 –

+1

@FelixKling使它發生':)' –

+0

有關JavaScript作用域的詳細說明:http://stackoverflow.com/questions/500431/javascript-variable-scope –

回答

1

將它們存儲在函數之外的變量中,並且您可以訪問它。如果您需要知道信息何時可用,請定義回調函數或查看javascript自定義事件。

-1

定義函數外部的全局變量。

var myVariable1_status; 
var myVariable1_data; 

然後將狀態和數據值分配給函數中的變量。

function(){ 
    myVariable1_status = status; 
    myVariable1_data = data; 
} 
+1

作業嵌套在另一個函數中,並用「var」聲明變量隱藏全局。 – Daniel

+0

是的。複製粘貼錯誤...現在編輯.. – Solders

1

您也可以在JavaScript中做同樣的事情。請參閱document

您可以創建一個類:

function httpResponse(status,data) { 
this.status=status; 
this.data=data; 
} 

設定值,如:

var myStatus = new httpResponse(response.status, response.data); 

添加return語句:

return myStatus; 

在調用代碼可以訪問這些數據爲:

var status = myStatus.status;