链式 Promise:理解错误传播
在 Promise 链中,每个 Promise 的解决或拒绝都会影响后续的 Promise。然而,有一个常见的误解,认为错误必须始终通过链传播。
Promise 链行为
当 Promise 被解决或拒绝时,它会触发其 then 回调。成功或错误处理程序可以返回一个值或承诺,这将成为链中下一个承诺的解决方案。
承诺中的错误处理
如果错误处理程序在 Promise 链中不会重新抛出错误或返回被拒绝的 Promise,该错误不会传播到后续的 Promise。这是因为链认为错误是在该承诺内处理的。
传播与错误处理
在您提供的延迟节点模块示例中,错误不是传播到promise2,因为promise1中的错误处理程序不会重新抛出错误。通过不重新抛出错误,它向链发出信号,表明错误已被处理。要传播错误,您需要按如下方式修改代码:
promise1.then( function(wins) { console.log('promise1 resolved'); return wins;}, function(err) { console.log('promise1 rejected'); throw err;}); // re-throw error
重新抛出错误和错误处理
重新抛出错误是类似的将“错误注释”从 John 传递给 Ginger 再传递给 Bob。如果 Ginger 处理了错误(即不重新抛出错误),她仍然可以使用不同的项目(例如,绿色小部件)来满足 Bob 的请求。这与 Promise 中的错误处理并不严格是关于传播错误,而是关于减轻其影响的概念相一致。
在数据库示例中,如果初始查询失败,第一个 Promise 中的错误处理程序链应该重新抛出错误以将其传播到后续的承诺。否则,链将认为错误已处理并继续其他插入。
以上是错误如何通过 JavaScript Promise 链传播?的详细内容。更多信息请关注PHP中文网其他相关文章!