确定异步执行何时完成
Determine when async execution is finished
我必须处理一个entries
数组,该数组需要为每个文件条目执行异步任务:getFile
和uploadResult
都是异步任务。我的问题是,如何知道何时使用asyncjs这样的异步库处理数组doc.entries
。下面的代码只是我试图实现的一个示例。
var doc = {
version: '1.7',
entries: [{
date: '11/11/10',
files: [{
name: 100,
executable: false
},
{
name: 101,
executable: false
}]
},
{
date: '11/12/10',
files: [{
name: 200,
executable: false
},
{
name: 201,
executable: false
}]
},
{
date: '11/13/10',
files: [{
name: 300,
executable: false
}]
},
{
date: '11/14/10',
files: [{
name: 400,
executable: false
}]
}]
};
doc.entries.map(function(entry){
entry.files.map(function(file){
getFile(file, function(err, result){
if(err){
throw Error(err)
}
uploadResult(result, function(err, status){
WriteOnDb(file.name, status, function(err, result){ ... });
});
})
});
});
我如何知道最后一个文件何时存储在数据库中,然后再做其他事情?
谢谢。
最简单的方法是使用promise或更好的可观察性,但也可以通过回调来实现——例如,您可以计算总共有多少任务和完成了多少任务:
var total = doc.entries
.map(function (entry) {
return entry.files.length;
})
.reduce(function (x, acc) {
return acc + x
}, 0);
var finished = 0;
function finishCallback(err) {
if (err === null) {
/// all async tasks are finished;
}
}
doc.entries.map(function (entry) {
entry.files.map(function (file) {
getFile(file, function (err, result) {
if (err) {
finishCallback(err);
} else {
uploadResult(result, function (err, status) {
WriteOnDb(file.name, status, function (err, result) {
if (err) {
finishCallback(err);
} else {
finished += 1;
if (finished === total) finishCallback(null);
}
});
});
}
})
});
});
相关文章:
- 如何检测何时执行 iframe 脚本
- AngularJS-由$scope创建的作用域何时执行$new()已删除.垃圾收集器或Angular负责处理它吗
- Javascript:Coderbyte挑战4:字母变化:帮助分析代码:这是如何大写元音的,以及何时执行else语句
- 如果另一个功能完成,则执行该功能,而不是何时
- 何时使用自动函数执行
- 何时执行与 DOM 更改相关的 JavaScript
- $.延迟:如何检测每个承诺何时执行
- 合成 JavaScript 元素何时执行
- 用户使用完滑块后执行函数
- 在 modernizr/yepnope 加载完所有文件后执行回调
- 在执行某些 ajax 操作时,此匿名回调函数何时运行
- 在Node.js中,我如何判断何时解析完网页
- 如何知道回调循环的哪一次迭代以及何时执行
- 确定异步执行何时完成
- 在执行完所有当前计划的回调后调用函数(节点)
- 知道.each()启动的所有异步调用何时执行完毕
- Scala函数何时执行
- 如何知道何时成功执行了多个回调,没有返回的承诺
- 无论如何,在执行entityAspect.acceptChanges之后,知道实体何时完成提交
- 检测Javascript何时完成执行