关于node.js循环内的回调函数,请前辈指导
发布于 11 年前 作者 zhangwei19940824 11149 次预览 最后一次回复是 11 年前 来自 问答
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 回复
计数、检查、通知
@tulayang 能具体一点吗,我没领悟你的意思。。。
:如何等待所有回调函数执行完成再return 呢
这个情况用 async 很适合
:console.log(item);//此时输出的item,应该与传进去的不同了
你试过没有?item 应该还在 function 的 scope 里,可以直接使用。
用 eventproxy 或者 async。推荐前者。
@leapon 我试过,输出的不是原来的值
@alsotang 谢谢,我学习下这些
@zhangwei19940824
输出的是原来的值
@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); }); }
执行结果是:
node try.js
你的Afunc里又加了一层,那把 item 绑到里层的函数上就可以了。
@leapon 我的意思是让Afunc需要一定时间执行完成,里层只是单纯的返回阿,没关系吧
这里如果A.func是一个异步函数,则 item 始终是 list 中的最后一个,可以用一个闭包解决此问题
想对一个数组执行异步函数,可以考虑 async 库中的 async.parallel,async.series,async.map 等函数
if i=length-1