在 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 接口返回的数据格式和状态码都不同。我们需要在所有请求完成后,来检查哪些请求成功了,哪些请求失败了。代码如下:
const urls = [ 'https://jsonplaceholder.typicode.com/todos/1', 'https://dog.ceo/api/breeds/image/random', 'https://jsonplaceholder.typicode.com/posts/1' ]; Promise.allSettled(urls.map(url => fetch(url))) .then(results => { results.forEach(result => { if (result.status === 'rejected') { console.log(`API ${result.reason.url} 失败:${result.reason}`); } else { console.log(`API ${result.value.url} 成功:${result.value.status}`); } }); });
该代码通过 fetch API 向三个接口发送请求,然后等待它们都执行完成后,统计每个接口的执行结果并输出到控制台。如果接口请求失败,则输出失败原因和对应接口的 URL;如果成功,则输出成功状态和对应接口的 URL。
总结
Promise.allSettled() 方法允许在 Promise 对象解决或拒绝后继续进行操作,它返回一个 Promise ,该 Promise 在所有给定的 Promise 都已经结束执行后再执行。该方法在处理多个 Promise 对象时非常有用,例如在并行执行多个异步请求时,可以避免其中一个请求失败时,导致整个程序的中断。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65acc143add4f0e0ff655a22