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谢谢!效果很好。