节点js将变量传递给请求回调函数

时间:2016-04-22 20:04:32

标签: javascript node.js asynchronous

我希望将变量绑定到我的请求对象,因此在进行回调时我可以访问此变量。

这是图书馆: https://github.com/request/request

这是我的代码。

var request = require('request');    
for (i = 0; i < cars.length; i++) { 


  request({
      headers: { 'Content-Type': 'application/json'},
      uri: 'https://example.com',
      method: 'POST',
      body: '{"clientId": "x", "clientSecret": "y"}'
    },
    function(err, res, body){
      // I want to put the correct i here.
      // This outputs cars.length almost everytime.
      console.log(i);
  });

}

1 个答案:

答案 0 :(得分:9)

您已经可以访问i,已经成熟,可以使用闭包!

var request = require('request');    
for (i = 0; i < cars.length; i++) { 

  (function(i){
    request({
        headers: { 'Content-Type': 'application/json'},
        uri: 'https://example.com',
        method: 'POST',
        body: '{"clientId": "myea1r4f7xfcztkrb389za1w", "clientSecret": "f0aQSbi6lfyH7d6EIuePmQBg"}'
      },
      function(err, res, body){
        // I want to put the correct i here.
        // This outputs cars.length almost everytime.
        console.log(i);
    });
  })(i);
}

原始代码的问题是异步函数在i值发生变化很久之后发生,在这种情况下,对于异步函数的每次调用,它将等于cars.length

通过使用自调用函数,我们只传入应该用于函数内所有内容的i值。