node.js尝试从多个请求中设置多个变量

时间:2016-07-19 21:20:35

标签: node.js

所以我一直在尝试从请求中设置一个全局变量,但似乎什么也没得到。我正在使用的代码

用于测试的用户名是username=

之后的test2
     var forSearching =  "test2"; 
     var name = "";

     console.log(forSearching);
     request("http://mercsystem.esy.es/get.php?username=" + forSearching, function(err, res, body) 
     {
            if (err) return console.error(err);
            var main = JSON.parse(body);
            if (main.success == "false")
            {
                message.reply("Sorry, invalid user!")
            }
            else
            {
              name = main.Username
            }
    });

1 个答案:

答案 0 :(得分:0)

如果在设置值后立即插入console.log(name),您将看到该值设置得很好。

问题可能是时机问题。 request()是一个异步操作。这意味着调用request()启动异步操作,然后代码的其余部分继续运行完成,然后,在稍后的某个时间,将使用最终的异步结果调用回调。

虽然您没有显示尝试使用name变量的位置,但您可能在调用回调之前检查此全局变量的值,因此在设置值之前。

在node.js中,您正在做的不是如何使用异步结果。它永远不会可靠(或根本不)。相反,使用异步结果的唯一地方是回调本身或从回调中调用的函数,并将结果传递给。

var forSearching = "test2";

console.log("begin");
request("http://mercsystem.esy.es/get.php?username=" + forSearching, function (err, res, body) {
    console.log("in request() callback");
    if (err) return console.error(err);
    var main = JSON.parse(body);
    if (main.success == "false") {
        message.reply("Sorry, invalid user!")
    } else {
        var name = main.Username
        console.log(name);          // value shows fine here
        // use the name variable here or call some function and pass
        // the name variable to it
    }
});
console.log("after request() call");

// You cannot use the name value here (even if it was in a global) because
// the async callback has not yet been called

如果您使用我已添加的console.log()语句运行此代码,您会看到以下事件序列:

 begin
 after request() call
 in request() callback

从此序列中,您可以看到request()调用之后的代码在异步回调运行之前运行。因此,您无法在那里使用name变量,即使它位于全局变量中。