在前端开发中,Promise 是一种优秀的异步编程解决方案。而在 ES10 中,Promise 的又新增了一个方法:Promise.allSettled()
,它用于并行执行多个 Promise 对象,并返回一个结果数组,该结果数组包含每个 Promise 对象的执行结果。本文将介绍该方法的语法、特性和应用场景,并对其和其他 Promise 方法进行对比,帮助读者更好地理解 Promise 的使用和优化。
Promise.allSettled() 的语法和特性
Promise.allSettled() 方法接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。该 Promise 对象在所有的 Promise 对象都执行完成后才会返回结果,结果为一个数组,数组的元素为每个 Promise 对象的结果。不同于 Promise.all() 方法,Promise.allSettled() 可以返回全部 Promise 对象的执行结果,即使其中的 Promise 对象成功或失败均会返回。
具体的语法如下:
Promise.allSettled(iterable)
iterable
: 接收一个可迭代对象,例如 Array 或 Set 等,其中包含多个 Promise 对象。
Promise.allSettled() 返回的数组的每个元素都是一个对象,该对象包含以下两个属性:
status
: 表示 Promise 对象执行的状态,该值为字符串类型,取值为fulfilled
(成功)或rejected
(失败)。value
或reason
:表示 Promise 对象返回的值或失败的原因,该值为任意类型。
Promise.all() 与 Promise.allSettled() 的比较
Promise.all() 和 Promise.allSettled() 方法的主要区别在于当其中某个 Promise 对象被拒绝时,Promise.all() 会立即抛出异常并结束后面的执行逻辑,而 Promise.allSettled() 则会执行完剩下的 Promise 对象,并将结果以数组形式返回给调用方。
下面举例说明:
-- -------------------- ---- ------- -- ------------- ----------------------------------------- ------------------------ ----------------------------- ------------ -- -------------------- ------------ -- ---------------------- -- -- ------------- ---------- -- -------------------- ------------------------------------------------ ------------------------ ----------------------------- ------------ -- --------------------- -- ------- ------- ------------ ------ ---------- -- - ------- ----------- ------- ------- -- - ------- ------------ ------ ---------- --
可以看到,当使用 Promise.all() 时出现异常只会返回错误信息,并没有输出成功的对象。而使用 Promise.allSettled() 则会将所有对象都返回,并标出状态。因此,在需要能够返回所有结果的情况下,Promise.allSettled() 是比较好用的。
Promise.race() 与 Promise.allSettled() 的比较
Promise.race() 和 Promise.allSettled() 的主要区别在于,Promise.race() 只要其中的一个 Promise 对象状态为成功或失败,就会结束执行,并返回该状态;而 Promise.allSettled() 则会等待所有 Promise 对象执行完成并返回结果,无论成功或失败。
下面举例说明:
-- -------------------- ---- ------- -- -------------- ------------------------------------------ ------------------------ ----------------------------- ------------ -- -------------------- ------------ -- ---------------------- -- -- ---------- -- -------------------- ------------------------------------------------ ------------------------ ----------------------------- ------------ -- --------------------- -- ------- ------- ------------ ------ ---------- -- - ------- ----------- ------- ------- -- - ------- ------------ ------ ---------- --
可以看到,当使用 Promise.race() 时只会返回第一个执行完成的 Promise 对象的状态。而使用 Promise.allSettled() 则会等待所有的 Promise 对象执行完成,并将执行结果包含在数组中返回。
Promise.allSettled() 的应用场景
在实际开发中,Promise.allSettled() 主要用于处理多个 Promise 对象并行执行的场景。对于需要处理多个 Promise 对象的情况,开发者可以使用 Promise.allSettled() 方法将所有 Promise 对象的执行结果汇总起来,进行统一处理。例如:多个接口的返回数据均为 Promise 对象,需要将它们的执行结果合并,再进行处理时,使用 Promise.allSettled() 则可以做到这一点。
下面举例说明:
-- -------------------- ---- ------- ----- ---- - -------- ------- -------- ------------------------ ------------- -- - ----- -------------- - --- -- ----------- ------- ------- ----- ------------ - --- -- ----------- ------- ------- ---------------------- -- - -- -- ------ ----- ------- --------------------------------- -- -------------- --- ------------ - ---------------------------------- - ---- -- -------------- --- ----------- - --------------------------------- - --- -- --------- ------- ------- -- --- -- --------- ------- ------- -- --- ---
结语
通过本文,我们了解了 ES10 新增的 Promise.allSettled() 方法的语法、特性、应用场景,并和其他常用的 Promise 方法进行对比,帮助读者更好地理解和优化 Promise 的使用。在实际开发中,合理运用 Promise.allSettled() 方法,可以提高代码的可读性和可维护性,也能够更好地处理多个异步函数的执行结果,在性能和用户体验上都有一定的提升。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67974912504e4ea9bde5f997