gpt4 book ai didi

javascript - Promise.all()被拒绝后的值,显示['' PromiseStatus''] : resolved if catch block is present

转载 作者:数据小太阳 更新时间:2023-10-29 06:09:26 26 4
gpt4 key购买 nike

我有两个 promise ,一个被拒绝,一个被解决。 Promise.all 被调用。当其中一个 promise 被拒绝时,它执行了 Promise.all 的 catch block 。

const promise1 = Promise.resolve('Promise 1 Resolved');
const promise2 = Promise.reject('Promise 2 Rejected');

const promise3 = Promise.all([promise1, promise2])
.then(data => {
console.log('Promise.all Resolved', data);
})
.catch(error => {
console.log('Promise.all REJECTED', error);
})
setTimeout(() => {
console.log(promise1, promise2, promise3)
}, 200);

enter image description here

如果我没有捕获到 Promise.all(),该值将保持为 Rejected,即

const promise3 = Promise.all([promise1, promise2])
.then(data => {
console.log('Promise.all Resolved', data);
})

我是不是漏掉了一些关于 promises 的东西。

最佳答案

我看到了它的答案,但我想我可以再澄清一点。

请记住,每个 then()catch() 都会返回一个 Promise。 (如果你在回调中没有任何明确的return,两者都将返回Promise.resolve(undefined))。因此,在 promise 被 resolve 之后,整个 promise 链的值将是最后一个 then() 返回的 promise;示例:

promise = Promise.resolve(1)
.then(() => Promise.resolve(2))
.then(() => Promise.resolve(3));
console.log(promise);
setTimeout(() => {
console.log(promise)//Promise {<resolved>: 3}
}, 0)

catch() 的工作原理与 then() 完全相同。唯一的区别是它调用 rejected promise 而不是 resolved。在下面的示例中,我只是将所有 resolve 替换为 reject 以证明这一点。

promise = Promise.reject(1)
.catch(() => Promise.reject(2))
.catch(() => Promise.reject(3));
console.log(promise);
setTimeout(() => {
console.log(promise)//Promise {<rejectd>: 3}
}, 0)

现在来回答你的问题。 Promise.all() 的值是一个被拒绝的 promise ,因为数组中的一个 promise 被拒绝了。如果您在链中有一个 catch block ,控制将转到该 catch block ,该 block 将返回一个 Promise.resolve(undefined)。如果您在链中没有 catch block ,您将得到您所拥有的:一个被拒绝的 promise 。

关于javascript - Promise.all()被拒绝后的值,显示['' PromiseStatus''] : resolved if catch block is present,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51011826/

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