范围问题(NodeJS - “请求”包)

时间:2017-07-09 19:16:24

标签: javascript node.js scope npm-request

我遇到了变量范围的问题。我需要能够在“请求”之外访问“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”变量时,它会打印一个空字符串,而不是请求包中的详细信息。

1 个答案:

答案 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