在前端开发中,异步编程是非常常见的。而 Promise 是异步编程的一种方式,它可以简化异步编程的过程,使代码更加可读、可维护。
ES11(也称为 ECMAScript 2020)新加入了 Promise.allSettled(),该方法可以让异步编程更简单。本文将介绍 Promise.allSettled() 的特性和用法,结合示例代码让读者更好地理解和掌握。
Promise.allSettled() 的特性
Promise.allSettled() 接收一个 Promise 数组,当所有 Promise 都 settled(该 Promise 的状态发生改变,即 fulfilled 或 rejected)时,返回一个新的 Promise,该 Promise 的状态为 fulfilled,其值是一个数组,每项代表传入的 Promise 数组中的一个 Promise 的结果。
不同于 Promise.all() 的特性,在 Promise 数组中只要有一个 Promise 被 rejected,Promise.all() 就会直接返回一个 rejected 状态的 Promise,而 Promise.allSettled() 则会在所有 Promise settled 后返回一个 fulfilled 状态的 Promise,无论 Promise 的状态是 fulfilled 还是 rejected,它们的结果都会包含在返回的数组中。返回的数组中的每个对象都有以下两种属性之一:
status
:代表 Promise 的状态,如果 Promise fulfilled,则为'fulfilled'
;如果 Promise rejected,则为'rejected'
;value
或reason
:分别代表 Promise fulfilled 和 Promise rejected 时的值。
Promise.allSettled() 的用法
基础用法
Promise.allSettled() 用法很简单,只需传入一个 Promise 数组即可。例如:
const promise1 = Promise.resolve(1); const promise2 = Promise.reject('error'); const promise3 = Promise.resolve(3); Promise.allSettled([promise1, promise2, promise3]).then(results => console.log(results));
输出的结果为:
[{ status: 'fulfilled', value: 1 }, { status: 'rejected', reason: 'error' }, { status: 'fulfilled', value: 3 }]
结合其他异步编程方式使用
Promise.allSettled() 和 async/await、Promise.race() 等异步编程方式结合使用,可以进一步简化异步编程的过程。
-- -------------------- ---- ------- ----- --------- - ----- --- -- - ----- -------- - ----- ----------- -- -------------- - ----- --- ----------- ----- - - ----------------- - ------ ---------------- -- ------ -- -- - --- - ----- ------- - ----- -------------------------------------------- ------------------------ -------------------------- ----- --------- - --------------------- -- ------------- --- ------------ ----- -------- - --------------------- -- ------------- --- ----------- ---------------------- -------- ---------------------- -- ----------------- --------------------- -------- --------------------- -- ------------------ - ----- ------- - -------------------- ------- ----------- - -----
在上面的代码中,我们结合了 async/await 和 Promise.allSettled(),获取了三个 JSON 数据文件的结果。最后根据返回结果的状态,分别打印出 fulfilled 的结果和 rejected 的原因。
总结
Promise.allSettled() 是一个非常实用和有用的方法,它可以让开发者更加方便地处理异步编程时返回的结果,无论 Promise 的状态是 fulfilled 还是 rejected,其结果都会被包含在返回的数组中,让代码更加易于维护。
使用 Promise.allSettled() 和其他异步编程方式结合使用,能够让我们的异步编程过程更加简单、可读性更强。希望本文能够为读者提供帮助,让大家更好地掌握异步编程的技巧。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648bdda848841e9894a29ea6