我有两个承诺,一个被拒绝,另一个被解决。 Promise.all 被调用。当其中一个承诺被拒绝时,它执行了 Promise.all 的 catch 块。
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);
如果我没有对 Promise.all() 进行捕获,则该值仍为 Rejected,即
const promise3 = Promise.all([promise1, promise2])
.then(data => {
console.log('Promise.all Resolved', data);
})
我是否遗漏了一些关于承诺的事情?
我看到了它的答案,但我想我可以澄清一点。
请记住,每个then()
or catch()
返回一个Promise
。 (如果你没有明确的return
在回调中,两者都会返回Promise.resolve(undefined)
)。因此,在 Promise 解决之后,整个 Promise 链的值将是最后一个返回的 Promisethen()
;
例子:
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
承诺而不是resolved
。
在下面的例子中,我只是替换所有resolve
by 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()
是一个被拒绝的承诺,因为数组中的承诺之一被拒绝。如果链中有一个 catch 块,控制权将转到该块catch
块将返回一个Promise.resolve(undefined)
。如果链中没有 catch 块,您将得到您所拥有的:被拒绝的承诺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)