我有一个异步功能,我想在一定范围内为我执行。我尝试了这个:
var async = require('async');
function main(a, b){
var funcs = [];
for(var i=a; i<=b; i++){
var txt = "func "+i;
funcs.push(function(callback){
console.log(i);
console.log(txt);
callback(null, null);
});
}
async.parallelLimit(funcs, 10, function(){
console.log("done");
});
}
main(1,5);
输出为:
6
func 5
6
func 5
6
func 5
6
func 5
6
func 5
done
为什么我没有“ func 6”?顺便说一句我想要1 2 3 4 5 ...
谢谢
您的函数将在循环完成后执行。因此after循环i
将是相等的6
,并且txt
将是相等的func 5
。将循环的内容放入闭包进行修复:
for(var i=a; i<=b; i++){
(function(i) {
var txt = "func "+i;
funcs.push(function(callback){
console.log(i);
console.log(txt);
callback(null, null);
});
})(i);
}
PS在ECMAScript 6(即将发布的JavaScript规范)中,有一些let
变量可以解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句