我遇到了变量范围的问题。我需要能够在“请求”之外访问“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”变量时,它会打印一个空字符串,而不是请求包中的详细信息。
答案 0 :(得分:1)
这不是范围问题。 NodeJS的本质是异步的,这意味着console.log(userLocation)
在执行之前不会等待request
完成。这就是承诺和回调函数存在的原因。
如果要打印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。