gpt4 book ai didi

javascript - promise 链和所有

转载 作者:行者123 更新时间:2023-12-03 02:24:54 25 4
gpt4 key购买 nike

我构建了这个我不理解的用例。

我想创建一个 Promise 数组(示例中为 var array)并添加解析数组每个元素的所有 Promise。或者,对于数组的某些元素,我想进行额外的阐述,因此我链接另一个 Promise (在 if (e === 'b') 内)。

我预计Promise.all(array)将捕获拒绝条件,但会打印:

> node .\test.js
b is ok
all clear
(node:1304) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: 'b is ok' is NOT ok

为什么会发生这种情况? Promise.all不管理链接?

thePromise指向一个被另一个 promise 链接的 promise 。我认为所有thePromise需要评估链是否已解决,而不仅仅是第一个。我错过了什么吗?

我注意到实际的解决方案是像这样重新分配 promise :

thePromise = thePromise.then((msg) => ....

示例代码:

const array = [];
const arrayData = ['a', 'b', 'c'];

arrayData.forEach((e) => {
let thePromise = newPromise(e);

if (e === 'b') {
thePromise.then((msg) => {
console.log(msg);
return newPromise(msg);
});
}

array.push(thePromise);
});

Promise.all(array)
.then(() => console.log('all clear'))
.catch(err => console.log('something goes wrong', err));


function newPromise(value) {
return new Promise((resolve, reject) => {
if (value === 'b is ok') {
reject(new Error(`'${value}' is NOT ok`));
} else {
resolve(`${value} is ok`);
}
});
}

谢谢你的解释

最佳答案

The Promise.all don't manage the chaining?

是的,确实如此。它管理了数组中的所有 promise ,所有这些 promise 都已实现,这就是它记录全部清除的原因。

Promise.all 不知道(也无法知道)您使用 thePromise.then(…) 创建的新 Promise。它不在链条中,而是在分支中。当它被拒绝时,没有任何东西可以处理错误。

关于javascript - promise 链和所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48987407/

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