This question already has answers here:
How do I return the response from an asynchronous call?
(39个答案)
2年前关闭。
我有一个变量范围的问题。我需要能够在“请求”之外访问“ userLocation”。可以在https://github.com/request/request处找到请求包。这是我的以下代码:
当我尝试输出“ userLocation”变量时,它会打印一个空字符串,而不是请求包中的详细信息。
如果您想了解更多信息,请查看此awesome tutorial。
(39个答案)
2年前关闭。
我有一个变量范围的问题。我需要能够在“请求”之外访问“ userLocation”。可以在https://github.com/request/request处找到请求包。这是我的以下代码:
var request = require('request');
var userLocation = "";
request('http://ipinfo.io', function(error, res, body) {
var ipDetails = JSON.parse(body);
userLocation = ipDetails.loc;
});
console.log(userLocation);
当我尝试输出“ userLocation”变量时,它会打印一个空字符串,而不是请求包中的详细信息。
最佳答案
这不是范围问题。 NodeJS的性质是异步的,这意味着console.log(userLocation)
在执行之前不会等待您的request
完成。这就是为什么Promise和回调函数存在的原因。
如果要打印userLocation
,则将其移动到回调函数中,如下所示:
var request = require('request');
var userLocation = "";
request('http://ipinfo.io', function(error, res, body) {
var ipDetails = JSON.parse(body);
var userLocation = ipDetails.loc;
console.log(userLocation);
});
如果您想了解更多信息,请查看此awesome tutorial。
09-06 14:52