- Objective: - Breadcrumb: # 概念阐释 # 实例 # 相关内容 # 问题 没有链式调用的情况下返回的结果 ![](http://image.harryrou.wiki/2023-09-04-CleanShot%202023-09-04%20at%2007.57.31%402x.png) [[js Iterators 数组函数内置对象 every()]])的用法 ![](http://image.harryrou.wiki/2023-09-04-CleanShot%202023-09-04%20at%2009.05.09%402x.png) 如何通过[[js 异步 Promise.then()方法]]解析resolve值并传入下一个函数 ![](http://image.harryrou.wiki/2023-09-04-CleanShot%202023-09-04%20at%2009.53.07%402x.png) 返回的结果 ![](http://image.harryrou.wiki/2023-09-04-CleanShot%202023-09-04%20at%2008.13.16%402x.png) ## 2个常见错误 - 嵌套而没有链式调用 - 忘记写return - 写出正确写法 ```js checkInventory(order) .then((resolvedValueArray) => { processPayment(resolvedValueArray) .then((resolvedValueArray) => { shipOrder(resolvedValueArray) .then((successMessage) => { console.log(successMessage); }); }); }); ``` # 问题答案 ## 常见错误的正确写法 ```js checkInventory(order).then((resolvedValueArray)=>{ return processPayment(resolvedValueArray); }) .then((resolvedValueArray)=>{ return shipOrder(resolvedValueArray); }) .then((successMessage)=>{ console.log(successMessage); }); ``` ## 为什么errorMessage捕获 Promise 链中的任何拒绝(rejected)状态,successMessage仅捕获shipOrder的resolve值? 在一个 Promise 链中,如果任何一个 Promise 被拒绝(rejected),它不会继续执行后面的 `.then()` 语句,而是直接跳到最近的 `.catch()` 语句。因此,`.catch()` 可以捕获链中的任何拒绝,不仅仅是它之前的一个 Promise。 # 参考资料 `/my-projects/Promise链式调用 - 支付流程`