gpt4 book ai didi

javascript - 如何在 promise 中处理这种情况?

转载 作者:行者123 更新时间:2023-11-30 09:27:02 25 4
gpt4 key购买 nike

我有一个数组,如果满足某些条件,其中每个元素将执行 2 个嵌套的异步任务。否则,将执行 1 个正常的同步任务,并在完成后返回包含新更新的数组。

这是我的代码的简化版本:

    someFunction(array) {
array.forEach((element, index) => {
if (some checks hold) {
asyncTask1(element).then(updatedElement => {
asyncTask2(updatedElement).then(elementFinal => {
array[index] = elementFinal;
});
});
return;
}
array[index] = normalSyncTask(element);
});
}

我需要这个函数来仅在处理完所有元素时返回更新后的数组:

someFunction(array).then(updatedArray => {
//对更新后的数组做一些事情
});

这是我的尝试:

someFunction(array) {
var promises = [];
array.forEach((element, index) => {
if (some checks hold) {
var promise = asyncTask1(element);
promise.then(updatedElement => {
asyncTask2(updatedElement).then(elementFinal => {
array[index] = elementFinal;
});
});
promises.push(promise);
return;
}
array[index] = normalSyncTask(element);
});
return Promise.all(promises).then(() => Promise.resolve(array));
}

请原谅我的愚蠢尝试,但无论我阅读了多少教程,我都无法真正理解 promise 的确切工作原理。

最佳答案

这应该有效:

someFunction(array){
const promises = array.map((element, index) => {
if(some checks hold){
return asyncTask1(element).then(asyncTask2);
}
return normalSyncTask(element);
});

return Promise.all(promises).then((values) => {
console.log('Everything is OK', values);
});
}

您使用 Array.map 生成一组 promise ,并使用 Promise.all 等待所有 promise 得到解决。

不是 promise 的值将被 Promise.all 忽略,并与函数返回的 values 数组中的 promise 结果一起返回。

关于javascript - 如何在 promise 中处理这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766859/

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