eventproxy如何实现重复型异步顺序执行代码?
发布于 10 年前 作者 ycczkl 5713 次预览 最后一次回复是 10 年前 来自 问答
题目有点绕,我来解释下。 根据文档:
重复异步协作
var ep = new EventProxy();
ep.after('got_file', files.length, function (list) {
// 在所有文件的异步执行结束后将被执行
// 所有文件的内容都存在list数组中
});
for (var i = 0; i < files.length; i++) {
fs.readFile(files[i], 'utf-8', function (err, content) {
// 触发结果事件
ep.emit('got_file', content);
});
}
根据文档我知道多个fs.readFile()函数会异步执行并且顺序不可控,当所有异步操作结束后会返回到after函数中。 如果现在我希望顺序执行多个异步操作应该怎么写呢(先读取fule[0], 然后读取file[1]…file[n-1],最后返回结果)?
7 回复
wrap一个next,当next被call,执行下一个。
你可以用 asnyc.parallel() 去执行
执行一个emit一下: // var ep = new eventproxy();
ep.on(‘step1’,function(){ fs.readFile(‘file1’,function(err,content){ if(err){return} ep.emit(‘step2’); }) })
ep.on(‘step2’,function(){ fs.readFile(‘file2’,function(err,content){ if(err){return} ep.emit(‘step3’); }) })
…
ep.emit(‘step1’);
跟着写一个,这个场景用Async的eachSeries或者Promise的map也能实现。
@2yuri 这个方法不太优雅。 如果我step数量不确定呢
@albin3 懂了 谢谢
@ycczkl 只是提供思路,done和fail实现方式其实是一样的,只是封装了一下callback