ES10 的 Promise.all() 和 Promise.race()

阅读时长 3 分钟读完

在前端开发中,异步操作是一个不可避免的问题。为了更好地处理异步操作,JavaScript提供了Promise,它能够处理异步请求,我们可以通过then链式地进行处理。在ES10中,新增加了Promise.all()和Promise.race()方法,分别用来处理多个Promise的并行请求和竞争请求。

1. Promise.all()

Promise.all()方法接收一个包含多个Promise的数组,返回一个新的Promise。该返回的Promise会在所有Promise都执行完成后resolve这个数组,其中包含着每个Promise执行结果的数据。如果其中任意一个Promise失败,则整个Promise.all()的结果将会是一个rejected状态。

下面是一个Promise.all()方法的示例代码:

在上述示例代码中,Promise.all()方法接收三个Promise实例的数组,并在都完成后返回一个包含了每个Promise执行结果的数据。

2. Promise.race()

相比Promise.all()方法的等待全部Promise完成,Promise.race()方法是只要其中任意一个Promise完成,无论成功或是失败,Promise.race()主体就会进入对应的状态。Promise.race()方法同样返回一个Promise实例。

下面是一个Promise.race()方法的示例代码:

-- -------------------- ---- -------
----- -------- - --- --------------- -- ------------------- ---- --------
----- -------- - --- --------------- -- ------------------- ---- --------
----- -------- - --- ----------------- ------- -- ------------------ ----- ----------

----------------------- --------- ----------------------- -- -
    ------------------- -- -----
---------------- -- -
    ------------------- -- -------
---

在上述示例代码中,Promise.race()方法接收三个Promise实例的数组。因为promise2先完成,所以Promise.race()的结果就是'bar',而不是需要等到全部完成。

3. 结论

Promise.all()和Promise.race()是两个在处理多个Promise时非常实用的方法。Promise.all()适用于想要等待所有Promise完成后获得结果的场景,Promise.race()适用于想先获得最快Promise结果的场景。我们可以灵活地使用它们,帮助我们处理异步请求,提高代码效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66eed0bd6fbf9601972acce4

纠错
反馈