node.js如何在异步操作之外保存变量以访问其内部的回调?

时间:2017-07-30 12:50:32

标签: javascript node.js express asynchronous promise

请参阅下面的示例代码,我在promise / Async调用之外声明一个变量,当每个请求到达此行时,它的值都会被分配,现在我的问题是,如果有很多请求到达并达到当它同时到达console.log(something);行时:

  1. node.js将每个请求视为一个对象,并保持每个请求的something值,或者只打印最后一个值?

  2. 如果打印最后一个,我该如何解决问题并保持something特定于每个请求?

  3. router.get('/test', function(req, res) {
      var something = req["request's specific data"];
    
      anAsyncCall(something2).then(function(data) {
        //value of something?
        console.log(something);
      });
    
    });
    

3 个答案:

答案 0 :(得分:1)

简短回答:每个请求AFAIK独有

答案 1 :(得分:1)

使用var关键字声明的变量是本地作用于声明它们的函数。

每次调用函数都会在该范围内创建一个新范围和一个新变量。



function myFunction(myValue) {
    var copyOfMyValue = myValue; // For demonstration purposes. Function arguments are the same as variables declared with var
    function showMyValue() {
        console.log(copyOfMyValue);
    }
    return showMyValue;
}

setTimeout(myFunction(1), 100);
setTimeout(myFunction(2), 90);
setTimeout(myFunction(3), 80);
setTimeout(myFunction(4), 70);
setTimeout(myFunction(5), 60);




这是标准的JavaScript行为,并不是Node.JS特有的。

答案 2 :(得分:1)

var something在函数function(req, res)

中声明为本地

/test的每次网址调用都会创建一个something的新实例,每个实例都是本地(和独立)的每个请求。

所以你的答案是:

  1. node.js将每个请求视为一个对象并保留特定于每个请求的值,或者只打印最后一个值?
  2. 答案:它将保持特定'

    1. 如果打印最后一个,我该如何解决问题并保留每个请求的具体内容?
    2. 答案:不相关,因为1.; - )