链式 Promise 不会传递拒绝
尽管它们有意依赖于先前的 Promise,但链式 Promise 可能无法传播错误。这种行为可能令人费解,但植根于 Promises/A 的本质。
误解:链依赖
误解是每个然后都意味着对前一个的依赖承诺的成功解决。然而事实并非如此。
Promise Chaining
在 Promise Chaining 中,then 中回调函数的结果成为后续 Promise 的解析。因此:
处理拒绝
then 回调中抛出或拒绝的承诺会触发下一个承诺的 catch 或错误回调。但是,如果在回调中处理错误,则链将继续执行,就像承诺已成功解决一样。
示例:
考虑以下代码:
let promise1 = Promise.resolve(42); let promise2 = promise1.then( (value) => value * 2, (err) => { console.error('Error in promise1:', err); // Handle the error (e.g., return a new promise) } ); promise2.then((value) => console.log('Value from promise2:', value));
在此示例中,如果 Promise1 被拒绝,则其错误处理程序会记录错误,然后返回默认值。这允许promise2继续进行,就像它已收到来自promise1的成功响应一样。
数据库更新的应用程序
在您的数据库更新示例中,db.query中的错误将在其 then 回调中处理,并提供默认值。这允许后续的 then 回调继续进行并仍然执行数据库更新,即使 db.query 失败。
最佳实践
为了确保一致的错误处理,请考虑以下最佳实践:
以上是为什么连锁承诺有时会忽略拒绝?的详细内容。更多信息请关注PHP中文网其他相关文章!