ES6(ES2015)及其对 Promise 的扩展

阅读时长 5 分钟读完

ES6(ES2015)是 JavaScript 的一个重要版本,在语言特性、模块化、函数等方面做了许多改进。其中,它对 Promise 的扩展是一个比较值得关注的方面。

Promise 简介

Promise 用于处理异步操作,它可以利用链式调用将多个异步操作串行执行。Promise 对象有三种状态:pending(进行中)、fulfilled(成功)和 rejected(失败)。

下面是一个简单的 Promise 使用示例:

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

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

在上面的代码中,fetch 方法返回一个 Promise 对象,用 .then() 方法处理它的结果。如果成功,resolve 方法将 Promise 的状态改为 fulfilled(成功),并且把结果传给后续的 .then() 方法;如果失败,reject 方法将 Promise 的状态改为 rejected(失败),并且把错误原因传给后续的 .catch() 方法。

Promise.finally()

ES6 增加了 finally() 方法,用于指定不管 Promise 成功还是失败,都要执行的代码。这个方法没有参数,它返回一个 Promise 对象,它的状态和前一个 Promise 对象的状态一样。

下面是一个使用 finally() 方法的示例:

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

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

在这个例子中,finally() 方法的作用是在 Promise 结束之后输出一条消息,表明 Promise 操作已经完成。

Promise.all()

ES6 还增加了 Promise.all() 方法,用于并行执行多个 Promise 对象,并在所有 Promise 对象都成功时返回一个 Promise 对象。如果其中一个 Promise 对象失败了,Promise.all() 方法返回的 Promise 对象也会失败,失败原因是第一个失败的 Promise 对象的失败原因。

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

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

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

这个例子中,Promise.all() 方法用于并行请求三个数据源,并在所有数据源都成功返回数据时输出这些数据。如果其中一个数据源请求失败,它会把失败原因作为 catch() 方法的参数,输出错误信息。

Promise.race()

Promise.race() 方法和 Promise.all() 方法的作用相似,不同之处在于,它在所有 Promise 对象中有一个状态改变时就立即返回一个 Promise 对象,无论改变的状态是成功还是失败。它的参数和返回值与 Promise.all() 方法相似。

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

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

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

在这个例子中,Promise.race() 方法用于异步请求两个数据源,一个速度很慢,一个速度很快。它返回第一个返回数据的 Promise 对象,忽略其它Promise 对象的状态变化。

总结

ES6 引入了 Promise.finally()Promise.all()Promise.race() 方法,使得处理异步操作变得更加方便。finally() 方法用于指定不管 Promise 成功还是失败,都要执行的代码;Promise.all() 方法用于并行执行多个 Promise 对象,并在所有对象都成功时返回一个 Promise 对象;Promise.race() 方法用于异步请求多个数据源,返回最先返回数据的 Promise 对象。这些方法的使用可以使前端的开发变得更加高效。

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

纠错
反馈