2013-10-29 136 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;