异步事件中如何在闭包外打印出闭包的结果???
发布于 12 年前 作者 lsmsnail 5295 次预览 最后一次回复是 12 年前 来自
var a = [1,2,3],
b = new Array();
a.forEach(function(each){
fs.readFile('test.html',function(){
b[b.length] = each;
})
})
console.log(b);//打印为[]
我希望在b被赋值后被打印出来,请问代码应该怎么改?
13 回复
fs.readFile是异步…还是不懂怎么解决,我希望获取到b = [1,2,3]
@lsmsnail
fs.readFileSync试试看我想用上面这种方式输出,为什么得到的results未定义?
@lsmsnail 是没定义啊,因为async的foreach 结果里没有result,只有err
@saber each不是应该会传值给results吗?
@lsmsnail 将forEach 改成map 就可以,forEach 是不管结果的
@hexie 额。。话说看到这里我也有了一个问题。。cb(null, each)这里给callback传参数为什么传不过去。。?我是新手。。
@ibigbug 用map就可以了
昨晚也碰到这个问题,设置了个计数器 遍历结束触发,EventEmitter 回调函数就行了 这个看个人需求 我执行的时候耗时平均 4ms 而同样的例子使用async 耗时平均18ms
挺好的,不同的思路。学习
@hexie 嗯 折腾折腾 async刚上手 不太会