我必须处理一个tag_or_commit
数组,该数组需要为每个文件条目执行异步任务:entries
和getFile
都是异步任务。我的问题是我怎么知道使用像asyncjs这样的异步库处理数组uploadResult
的时间。下面的代码只是我想要完成的一个例子。
doc.entries
我如何知道最后一个文件何时存储在数据库上然后再执行其他操作?
感谢。
答案 0 :(得分:1)
最简单的方法是使用promises或更好的observable,但你也可以使用回调 - 例如你可以计算总共有多少任务以及完成了多少任务:
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);
}
});
});
}
})
});
});