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

Javascript 范围问题(NodeJS-“请求”包),javascript,node.js,scope,npm-request,Javascript,Node.js,Scope,Npm Request,我对变量的范围有问题。我需要能够访问“请求”之外的“用户位置”。请求包可在以下我的代码中找到: var request = require('request'); var userLocation = ""; request('http://ipinfo.io', function(error, res, body) { var ipDetails = JSON.parse(body); userLocation = ipDetails.loc; }

我对变量的范围有问题。我需要能够访问“请求”之外的“用户位置”。请求包可在以下我的代码中找到:

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)
不会等待您的
请求在执行之前完成。这就是承诺和回调函数存在的原因

如果要打印
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);
});  

如果您想了解更多信息,请查看此信息。

您好,谢谢您的回复。如果我需要将“request”中的值赋给request函数之外的变量,该怎么办?承诺对您有效吗?新承诺((res,rej)=>{var resolve=function(myReqValue){res(myReqValue);}请求(“”,function(error,res,body){var-ipDetails=JSON.parse(body);var-userLocation=ipDetails.loc;resolve(userLocation);});})(“Userlocation:”+res)});@midnightsyntax谢谢!效果很好。