使用 ECMAScript 2018(ES9)的新 Promise 方法队列化异步操作

阅读时长 4 分钟读完

在前端开发中,我们经常需要处理异步操作,例如加载数据、发送网络请求等等。ES6 引入了 Promise,可以更优雅地处理异步操作,而 ES9 则新增了一些新的 Promise 方法,可以更好地解决异步操作时的并发问题。

Promise.allSettled

在实际开发中,我们可能需要同时发起多个异步请求,然后在所有请求完成后处理数据。这时候可以使用 Promise.all 方法来等待所有请求完成,例如:

但是这种方式有一个缺点:如果其中某个请求失败了,整个 Promise.all 的状态就会变为 rejected,并且后面的操作将无法进行。为了避免这种情况,ES9 引入了 Promise.allSettled 方法。

使用 Promise.allSettled 方法可以等待所有请求完成,而不管它们的状态是 fulfilled 还是 rejected。例如:

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

Promise.any

Promise.any 方法是 ES9 新增的另一个 Promise 方法,用于解决多个异步请求时,只要其中一个请求成功即可立刻返回的场景。

例如,在一个搜索页面中,我们可能需要同时搜索多个不同的数据源,并且只要有一个数据源返回了结果,就可以显示在页面上。这时候可以使用 Promise.any 方法来等待所有请求完成,然后返回第一个成功的请求结果。例如:

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

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

Promise.prototype.finally

Promise.prototype.finally 方法是 ES9 新增的另一个 Promise 方法,用于设置无论 Promise 是否被 rejected 或者 fulfilled,都必须执行的回调函数。

例如,在一个请求发出和请求响应之间,我们可能需要显示一个等待动画,确保用户知道请求正在进行中。这时候就可以使用 Promise.prototype.finally 来关闭等待动画,例如:

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

结论

ES9 引入的这些新的 Promise 方法,可以更好地解决异步操作时的并发问题,让我们写出更优雅、更健壮的代码。在日常开发中,应该尽可能地使用这些新的方法,提高代码的可读性和可维护性。

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

纠错
反馈