Promise.all() 与 Promise.allSettled() 在 ECMAScript 2019 中的新特性

在 ECMAScript 2019 中,Promise 对象新增了两个方法:Promise.all() 和 Promise.allSettled()。这两个方法都是用来处理多个 Promise 对象的,但是它们的行为有所不同。本文将会详细介绍这两个方法的用法、差异以及实际应用。

Promise.all()

Promise.all() 方法接收一个可迭代对象(如数组),并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的所有 Promise 对象都成功(即状态变为 resolved)后才会变为成功状态,且返回值是一个按照传入顺序排列的 Promise 对象的返回值数组。如果有任何一个 Promise 对象失败(即状态变为 rejected),则新的 Promise 对象会立即变为失败状态,并返回第一个失败的 Promise 对象的错误信息。

示例代码:

在上面的示例代码中,第一个 Promise.all() 的调用成功地返回了一个包含三个字符串的数组,因为传入的所有 Promise 对象都成功了。而第二个 Promise.all() 的调用则失败了,因为第二个 Promise 对象被拒绝了,因此新的 Promise 对象也被拒绝了,并返回了第二个 Promise 对象的错误信息。

Promise.allSettled()

Promise.allSettled() 方法与 Promise.all() 方法类似,也接收一个可迭代对象,并返回一个新的 Promise 对象。不同的是,新的 Promise 对象在传入的所有 Promise 对象都完成(即状态变为 resolved 或 rejected)后才会变为成功状态,且返回值是一个按照传入顺序排列的对象数组,每个对象都包含了对应 Promise 对象的状态和返回值/错误信息。

示例代码:

在上面的示例代码中,Promise.allSettled() 的调用返回了一个包含三个对象的数组,每个对象都包含了对应 Promise 对象的状态和返回值/错误信息。即使第二个 Promise 对象被拒绝了,新的 Promise 对象仍然成功地返回了所有 Promise 对象的状态和返回值/错误信息。

应用场景

Promise.all() 和 Promise.allSettled() 方法在实际应用中都有各自的优势。Promise.all() 方法通常用于在多个异步操作都成功完成后执行一些操作,如:

上面的代码中,Promise.all() 方法用于在获取用户和帖子数据后执行一些操作。

Promise.allSettled() 方法则通常用于需要获取多个数据源的情况,即使其中某个数据源出现错误也需要获取其他数据源的数据,如:

上面的代码中,Promise.allSettled() 方法用于获取用户、帖子和评论数据,即使其中某个数据源出现错误也仍然可以获取其他数据源的数据。

总结

Promise.all() 和 Promise.allSettled() 方法都是用来处理多个 Promise 对象的,但是它们的行为有所不同。Promise.all() 方法在传入的所有 Promise 对象都成功时才会成功,并返回一个按照传入顺序排列的 Promise 对象的返回值数组;而 Promise.allSettled() 方法则在传入的所有 Promise 对象都完成时才会成功,并返回一个按照传入顺序排列的对象数组,每个对象都包含了对应 Promise 对象的状态和返回值/错误信息。在实际应用中,我们可以根据具体的需求选择使用不同的方法来处理多个 Promise 对象。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6568ea12d2f5e1655d186081


纠错
反馈