在 ECMAScript 2020 版本中,新增了 Promise.allSettled() 方法,该方法与 Promise.all() 相似,但 Promise.allSettled() 允许在 Promise 对象解决或拒绝后继续进行操作。本文将介绍 Promise.allSettled() 方法的使用方法及案例。
Promise.allSettled() 方法介绍
Promise.allSettled() 方法返回一个 Promise ,该 Promise 在所有给定的 Promise 对象都已经结束执行后再执行。当所有 Promise 都已解决时,该 Promise 的解决值为一个数组,表示所有 Promise 对象的解决结果(无论成功或失败);如果有任何一个 Promise 被拒绝,则该 Promise 将解决为一个 rejected 状态,返回一个数组,其中包含每个 Promise 对象的拒绝原因。
Promise.allSettled() 方法使用方法
Promise.allSettled() 方法接收一个可迭代对象,如数组。示例代码如下:
Promise.allSettled([promise1, promise2, promise3]) .then(results => { console.log(results); });
该代码执行了三个 Promise 对象,它们分别为 promise1,promise2 和 promise3,然后等待它们全部执行完成,最后汇总结果并输出到控制台。
Promise.allSettled() 方法案例
接下来,我们通过一个案例来深入理解 Promise.allSettled() 方法的使用。
假设我们有一个网站需要从多个 API 接口获取数据,每个 API 接口返回的数据格式和状态码都不同。我们需要在所有请求完成后,来检查哪些请求成功了,哪些请求失败了。代码如下:
-- -------------------- ---- ------- ----- ---- - - ----------------------------------------------- ------------------------------------------ ---------------------------------------------- -- ------------------------------- -- ------------ ------------- -- - ---------------------- -- - -- -------------- --- ----------- - ---------------- -------------------- ---------------------- - ---- - ---------------- ------------------- ---------------------------- - --- ---
该代码通过 fetch API 向三个接口发送请求,然后等待它们都执行完成后,统计每个接口的执行结果并输出到控制台。如果接口请求失败,则输出失败原因和对应接口的 URL;如果成功,则输出成功状态和对应接口的 URL。
总结
Promise.allSettled() 方法允许在 Promise 对象解决或拒绝后继续进行操作,它返回一个 Promise ,该 Promise 在所有给定的 Promise 都已经结束执行后再执行。该方法在处理多个 Promise 对象时非常有用,例如在并行执行多个异步请求时,可以避免其中一个请求失败时,导致整个程序的中断。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65acc143add4f0e0ff655a22