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
处理程序将不会执行。这是故意的。