我对以下问题感到困惑:
defined onunhandledrejection
window.onunhandledrejection = event =>{
event.preventDefault();
console.log('catch unhandlerejection', event)
}
和两个测试功能
function test1() {
const rejectedP = Promise.reject('-');
rejectedP.finally();
return rejectedP;
}
async function test2() {
const rejectedP = Promise.reject('-');
rejectedP.finally();
return rejectedP;
}
当我打电话时test1
,只抓到一只onunhandledrejection
,但是当我打电话时test2
,我抓到了两个。
有什么区别test1
and test2
?
test2
被标记async
确实将您的返回值包装在新的承诺中:
function test2() { // de-async-ified
return new Promise(resolve => {
const rejectedP = Promise.reject('-');
rejectedP.finally();
resolve(rejectedP);
});
}
如果我们确实比较通话
const result1 = test1();
const result2 = test2();
通过将它们扩展到
const rejectedP = Promise.reject('-');
const finallyP = rejectedP.finally();
const result1 = rejectedP;
const result2 = new Promise(resolve => {
const rejectedP = Promise.reject('-');
const finallyP = rejectedP.finally();
resolve(rejectedP);
});
我们可以看到第一个片段创建了两个承诺(result1
and rejectedP
是相同的),而第二个片段创建了三个承诺。所有这些承诺都被拒绝了,但rejectedP
拒绝是由附加到它的回调处理的,都通过….finally()
and resolve(…)
(这在内部做了….then(resolve, reject)
).
finallyP
是在两个示例中均未处理其拒绝的承诺。在第二个例子中,result2
是一个不同于rejectedP
这也没有被处理,导致第二个事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)