1

“可能”一词表明在某些情况下,即使您自己发现错误,您也可以在控制台中收到此警告。

那些情况是什么?

4

1 回答 1

9

这在文档中得到了很好的解释:

未处理的拒绝/异常并没有真正达成一致的异步通信。问题是无法预测未来并知道最终是否会处理被拒绝的承诺。

[bluebird 解决此问题的方法] 是,如果拒绝在第二轮开始时未处理,则调用已注册的处理程序。默认处理程序是将堆栈跟踪写入 浏览器stderrconsole.error浏览器中。这与同步代码发生的情况很接近——您的代码无法按预期工作,您打开控制台并查看堆栈跟踪。好的。

当然,这并不完美,如果您的代码由于某种原因需要在 Promise 挂起一段时间后突然介入并将错误处理程序附加到某个 Promise 上,那么您将看到烦人的消息。

因此,例如,这可能会警告未处理的错误,即使它会得到很好的处理:

var prom = Promise.reject("error");
setTimeout(function() {
    prom.catch(function(err) {
        console.log(err, "got handled");
    });
}, 500);
于 2014-07-02T00:28:16.527 回答