我有以下代码。
它按预期工作,不会引发未处理的拒绝错误。
p = new Promise (fulfill, reject) ->
reject new Error 'some error'
p.catch (error) ->
console.log error
现在,第二个代码示例确实引发了未处理的拒绝错误。
有人可以向我解释为什么当我清楚地处理错误时会发生这种情况。
p = new Promise (fulfill, reject) ->
reject new Error 'some error'
p.then ->
console.log 'ok'
p.catch (error) ->
console.log error
顺便提一句。我正在 chrome 和 bluebird v3.4.7 中进行测试
Per 错误管理配置 http://bluebirdjs.com/docs/api/error-management-configuration.html如果没有 catch 处理程序,Bluebird 会抛出错误挂号的当一个承诺被拒绝时,无需等待看看将来是否会添加一个承诺。请注意,检查拒绝处理程序应该与设置 Promise 链的线程异步完成。正如他们所说,“某些编程模式会导致误报”。对真的?
另一方面,未捕获的异常错误不是 ES6 标准的一部分,实现以不同的方式处理它们:Firefox 等待或习惯等待,直到 GC 时间,而 Chrome 超时(或习惯超时)并显示“可能未捕获”承诺拒绝”错误。
请参阅 Bluebird 文档,了解 Bluebird 在附加处理程序之前承诺出现哪些错误的可能解决方案。
但是由于这两个示例都同步附加了 Promise 的拒绝处理程序p
,例外的原因似乎在其他地方。
感谢@DJ 的回答,但有不同的解释。在第二个例子中,then
返回一个被拒绝的承诺,如果p
被拒绝,并且没有拒绝处理程序。返回的承诺.then
很可能是抛出错误的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)