hui*_*hen 5 javascript promise
我对以下问题感到困惑?
定义的 onunhandledrejection
window.onunhandledrejection = event =>{
event.preventDefault();
console.log('catch unhandlerejection', event)
}
Run Code Online (Sandbox Code Playgroud)
和两个测试功能
function test1() {
const rejectedP = Promise.reject('-');
rejectedP.finally();
return rejectedP;
}
async function test2() {
const rejectedP = Promise.reject('-');
rejectedP.finally();
return rejectedP;
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时test1,只抓住了一个onunhandledrejection,但是当我打电话时test2,我抓住了两个。
test1和之间有什么区别test2?
test2被标记确实async会将您的返回值包装在新的承诺中:
function test2() { // de-async-ified\n return new Promise(resolve => {\n const rejectedP = Promise.reject('-');\n rejectedP.finally();\n resolve(rejectedP);\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果我们确实比较通话
\n\nconst result1 = test1();\nconst result2 = test2();\nRun Code Online (Sandbox Code Playgroud)\n\n通过将它们扩展到
\n\nconst rejectedP = Promise.reject('-');\nconst finallyP = rejectedP.finally();\nconst result1 = rejectedP;\n\nconst result2 = new Promise(resolve => {\n const rejectedP = Promise.reject('-');\n const finallyP = rejectedP.finally();\n resolve(rejectedP);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n我们可以看到第一个片段创建了两个承诺(result1并且rejectedP是相同的),而第二个片段创建了三个承诺。所有这些承诺都被拒绝,但rejectedP拒绝是由附加到它的回调处理的,通过\xe2\x80\xa6.finally()和resolve(\xe2\x80\xa6)(内部是这样做的\xe2\x80\xa6.then(resolve, reject))。
finallyP是在两个示例中均未处理其拒绝的承诺。在第二个示例中,result2与此不同的 PromiserejectedP也未得到处理,从而导致第二个事件。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |