在前端开发中,我们经常需要处理异步任务,例如向服务器发起 Ajax 请求获取数据。在这种情况下,我们可能需要同时发起多个请求,需要判断这些请求是否都已经完成。
ES6 中引入了 Promise 对象来解决这个问题。在这个语法糖中,我们可以使用 Promise.all()
方法来等待所有的请求完成,并返回一个包含所有请求结果的数组。
但是 Promise.all()
方法有个缺陷,在任何一个 Promise 对象被 reject 后,Promise.all()
立即执行 reject。这种情况下我们很难判断哪些 Promise 已经成功返回,哪些 Promise 返回了错误。因此,ES11 中引入了 Promise.allSettled() 新方法,可以更好地处理异步任务结果。
Promise.allSettled() 方法
Promise.allSettled()方法的语法如下:
Promise.allSettled(iterable)
其中,iterable 是一个可迭代对象,它包含了多个 Promise 对象。返回值是一个 Promise 对象,它的 value 是一个包含每个 Promise 对象的状态(fulfilled 或者 rejected)和结果(value 或者 reason)的对象数组。
实际应用
下面,我们通过一个例子来说明 Promise.allSettled() 的使用。
我们假设有三个异步请求 getData1()
、getData2()
、getData3()
,它们的返回结果有可能成功也有可能失败。我们使用 Promise.allSettled()
去并行并等待所有请求的数据返回。代码如下:
-- -------------------- ---- ------- ----- -------- - ------------ ----------- ------------ ---------------------------- --------------- -- - ------------------------ -- - -- -------------- --- ------------ - -------------------------- - ---- -- -------------- --- ----------- - --------------------------- - --- -- -------------- -- - ------------------- ---
代码中,我们将所有的 Promise 对象放入数组中并传给 Promise.allSettled()
方法,等待所有请求返回结果。然后我们使用 forEach 循环遍历每个 Promise 对象的状态和结果,根据状态和结果分别处理操作。
总结
Promise.allSettled() 方法是一个非常有用的工具,它可以让我们更好地处理异步任务的结果。使用它,我们可以轻松地等待多个异步任务同时完成,并在所有任务完成后统一处理它们的状态和结果。
总之,当你需要处理多个异步任务的结果时,Promise.allSettled() 方法是一个非常好的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f7afabf6b2d6eab3fee7cd