gpt4 book ai didi

javascript - 确定异步执行何时完成

转载 作者:行者123 更新时间:2023-12-03 08:13:19 24 4
gpt4 key购买 nike

我必须处理一个 entries 数组,需要为每个文件条目执行异步任务:getFileuploadResult 都是异步的任务。我的问题是如何知道何时使用 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);
}
});
});
}
})
});
});

关于javascript - 确定异步执行何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34055022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com