var list = [{k:1},{k:2},{k:3},{k:4}];
for(i in list){
var item = list[i];
A.func(item,function(err,result){
//如果这个func函数耗时比较长
//我在此处如何才能获取到传进去的参数item
console.log(item);//此时输出的item,应该与传进去的不同了
});
}
还有,循环内部含有回调函数,如何等待所有回调函数执行完成再return 呢
B.func = function(list,callback){
var i = 0;
for(i in list){
var item = list[i];
A.func(item , function(err,result){
//等待全部的回调函数执行完成后再进行return
//这个应该如何实现呢
i++;
});
}
return callback(i);//在此处这样返回的i应该还是0,
};
请前辈指导!
14 回复
输出的是原来的值
$ cat test1.js
var list = [{k:1},{k:2},{k:3},{k:4}];
for(i in list){
var item = list[i];
console.log('>>> item:', item);
Afunc(item,function(err,result){
console.log('item:', item);
});
}
function Afunc(data, callback) {
callback(null, 1);
}
$ node test1.js
>>> item: { k: 1 }
item: { k: 1 }
>>> item: { k: 2 }
item: { k: 2 }
>>> item: { k: 3 }
item: { k: 3 }
>>> item: { k: 4 }
item: { k: 4 }
@leapon 前辈,你看看,是这样子的 var list = [{k:1},{k:2},{k:3},{k:4}]; for(i in list){ var item = list[i]; console.log('>>> item:’, item); Afunc(item,function(err,result){ console.log('item:’, item); }); }
function Afunc(data, callback) {
setTimeout(function(){return callback(null, 1);},1000);
}
执行结果是:
node try.js
item: { k: 1 } item: { k: 2 } item: { k: 3 } item: { k: 4 } item: { k: 4 } item: { k: 4 } item: { k: 4 } item: { k: 4 }
var howdo = require('howdo');
var list = [{k:1},{k:2},{k:3},{k:4}];
howdo.each(list, function(key, item, done) {
A.func(item, done);
}).together(function(err, k1, k2, k3, k4) {
// 做你该做的
});
A.func(item,function(err,result){
//如果这个func函数耗时比较长
//我在此处如何才能获取到传进去的参数item
console.log(item);//此时输出的item,应该与传进去的不同了
});
这里如果A.func是一个异步函数,则 item 始终是 list 中的最后一个,可以用一个闭包解决此问题
(function(item){
A.func(item,function(err,result){
console.log(item);//此时输出的item,应该与传进去的相同了
});
})(item);
想对一个数组执行异步函数,可以考虑 async 库中的 async.parallel,async.series,async.map 等函数