Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js将变量传递到请求回调函数中_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 节点js将变量传递到请求回调函数中

Javascript 节点js将变量传递到请求回调函数中,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我希望将一个变量绑定到我的请求对象,以便在进行回调时可以访问该变量 这是图书馆: 这是我的密码 var request = require('request'); for (i = 0; i < cars.length; i++) { request({ headers: { 'Content-Type': 'application/json'}, uri: 'https://example.com', method: 'POST',

我希望将一个变量绑定到我的请求对象,以便在进行回调时可以访问该变量

这是图书馆:

这是我的密码

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);
  });

}
var request=require('request');
对于(i=0;i
您已经可以访问
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);
}
var request=require('request');
对于(i=0;i
原始代码的问题是,异步函数发生在
i
值更改很久之后,在这种情况下,每次调用异步函数时,它将等于
cars.length


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

正文是字符串吗?您是否尝试过
JSON.stringify({“clientId”:“x”,“clientSecret”:“y”})
您需要为每个索引使用一个单独的作用域。请参阅。^我觉得这是不同的,因为我使用的是一个请求对象。这与函数是异步的这一事实无关。@如果在他的代码中同步调用匿名函数,它将以
i
的预期值执行,不是吗?(是的)。如果没有异步调用,它将在<代码>的中间被调用为循环,期望的<代码> i>代码>值。因为它是异步的,所以它本质上只能在事件循环的下一次迭代中最快发生。在这种情况下,它只能在
for
循环完成运行后发生。(假定异步性不是这里唯一影响的概念,但它是原因的核心部分。)如果您使用超时而不是异步函数,您将看到每个console.log都有相同的值,5。@loan timeout是一个异步函数……这可能归结为语义。出于讨论的目的,我要说的是,异步函数是一种函数调用,在事件循环的一个特定迭代期间,在应用程序的同步流中不会调用它。setTimeout将在事件循环的当前迭代之后调用,即使它设置为0。在本讨论中,这是一个非常广泛但准确的异步定义。关键是事件循环:)