Seb*_*min 5 javascript promise ecmascript-6 es6-promise
我有两个承诺,一个拒绝,另一个解决.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);
Run Code Online (Sandbox Code Playgroud)
如果我没有Promise.all()上的catch,则值仍为Rejected,即
const promise3 = Promise.all([promise1, promise2])
.then(data => {
console.log('Promise.all Resolved', data);
})
Run Code Online (Sandbox Code Playgroud)
我错过了一些关于承诺的事情.
我看到了它的答案,但我想我可以澄清一下。
\n\n请记住,每个then()或catch()返回一个Promise。(如果你没有任何明确的return回调,两者都会返回Promise.resolve(undefined))。因此,在 Promise 解决之后,整个 Promise 链的值将是最后一个返回的 Promisethen() ;\n示例:
promise = Promise.resolve(1)\n .then(() => Promise.resolve(2))\n .then(() => Promise.resolve(3));\nconsole.log(promise);\nsetTimeout(() => {\n console.log(promise)//Promise\xc2\xa0{<resolved>: 3}\n}, 0)\nRun Code Online (Sandbox Code Playgroud)\n\ncatch()工作原理完全一样then()。唯一的区别是它调用的是rejectedPromise 而不是resolved。\n在下面的示例中,我只是将所有替换resolve为reject来演示这一点。
promise = Promise.reject(1)\n .catch(() => Promise.reject(2))\n .catch(() => Promise.reject(3));\nconsole.log(promise);\nsetTimeout(() => {\n console.log(promise)//Promise {<rejectd>: 3}\n}, 0)\nRun Code Online (Sandbox Code Playgroud)\n\n现在回答你的问题。的值Promise.all()是被拒绝的承诺,因为数组中的承诺之一被拒绝。如果链中有一个 catch 块,控制将转到该catch块,该块将返回Promise.resolve(undefined). 如果链中没有 catch 块,您将得到您所拥有的:被拒绝的承诺。
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |