我希望将变量绑定到我的请求对象,因此在进行回调时我可以访问此变量。
这是图书馆: 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);
});
}
答案 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
值。