【问题标题】:Scope Issue (NodeJS - "request" package) [duplicate]范围问题(NodeJS-“请求”包)[重复]
【发布时间】:2017-07-09 19:16:24
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js scope npm-request


    【解决方案1】:

    这不是范围问题。 NodeJS 的本质是异步的,这意味着console.log(userLocation) 在执行之前不会等待您的request 完成。这就是存在 Promise 和回调函数的原因。

    如果你想打印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

    【讨论】:

    • 您好,感谢您的回复。如果我需要将“请求”中的值分配给请求函数之外的变量怎么办?
    • Promise 对你有用吗? new Promise((res, rej) => { var resolve = function (myReqValue){ res(myReqValue); } request('ipinfo.io', function(error, res, body) { var ipDetails = JSON.parse(body ); var userLocation = ipDetails.loc; resolve(userLocation); }); }).then((res) => { console.log("Userlocation: " + res) });
    • @midnightsyntax 谢谢!效果很好。
    猜你喜欢
    • 2020-06-21
    • 2023-03-27
    • 2012-11-13
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多