0

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

4

1 回答 1

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);
});  

如果您想了解更多信息,请查看这个很棒的教程。

于 2017-07-09T19:21:59.773 回答