PromiseRejectionEvent的发生取决于拒绝参数类型(primitive vs Error)



CODE 1:

function unhandledrejection(event)
{
console.log("unhandledrejection: ", event.promise);
console.log("unhandledrejection: ", event.reason);
}
window.addEventListener('unhandledrejection', unhandledrejection);
var promise = new Promise((resolve, reject)=>reject(new Error("Oops")));
promise.then(value=>console.log(value));
<<p>

调试控制台/strong>:未捕获错误:Oops

代码2

var promise = new Promise((resolve, reject)=>reject("result"));
promise.then(value=>console.log(value));
<<p>

调试控制台/strong>:unhandledrejection:承诺…

unhandledrejection:结果

未捕获结果

那么为什么字符串在拒绝发送允诺ejectionevent但错误没有?

我无法复制你描述的不同行为。对我来说,这两种情况似乎是一致的。我在Chrome和Firefox中都试过了。

让我们考虑这两个被拒绝的承诺:

Promise.reject( 'bad' )
Promise.reject( new Error('also bad') )

未处理的拒绝处理程序接收一个事件,其.reason属性是承诺被拒绝的值。在第一个例子中,.reason将是字符串"bad";在我们的第二个示例中,它将是一个Error实例(其.message也为"bad")。


我还应该注意到您的示例代码链承诺使用.then。然而,如果第一个promise被拒绝,.then处理程序将不会执行。这是故意的。

最新更新