Promise 常用 API 及使用技巧

阅读时长 6 分钟读完

在前端开发中,我们常常需要进行一些异步操作,例如发起网络请求、操作 DOM 等。在过去,我们使用回调函数来处理异步操作,但这种方法很容易导致回调地狱,使代码难以理解和维护。Promise 是一种解决这一问题的新方法。本文将介绍 Promise 的常用 API 及使用技巧,帮助你更好地理解和应用 Promise。

Promise 简介

Promise 是一种用于异步编程的规范,它可以让我们以一种更加可读和维护的方式处理异步操作。Promise 有三种状态:

  • pending:初始状态,表示操作未完成;
  • fulfilled:表示操作成功完成;
  • rejected:表示操作失败。

当 Promise 状态从 pending 转变为 fulfilled 或 rejected 时,我们就称之为 Promise 已经 settled 了。Promise 对象通常会返回一个值,这个值在 fulfilled 或 rejected 状态下不一样。

Promise 常用 API

Promise.resolve 和 Promise.reject

Promise.resolve 方法返回一个用给定值解析后的 Promise 对象,Promise.reject 方法返回一个带有给定原因的 reject 状态的 Promise 对象。它们的用法如下所示:

Promise.all 和 Promise.race

Promise.all 方法接受一个 Promise 数组作为参数,当数组中的所有 Promise 对象都 resolved 时,返回一个解析结果数组。如果其中一个 Promise 对象 rejected,则返回该 Promise 对象的错误。

Promise.race 方法也接受一个 Promise 数组作为参数,但它只要求数组中有一个 Promise 对象 settle(resolve 或 reject)就行了。返回该 Promise 对象的值或错误。

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

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

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

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

Promise.then 和 Promise.catch

Promise 对象有两个重要的方法:then 和 catch。then 用于处理 resolved 状态的回调函数,catch 用于处理 rejected 状态的回调函数。它们的用法如下所示:

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

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

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

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

Promise 使用技巧

使用 async/await

async/await 是 ES2017 中引入的两个新关键字,可以简化 Promise 的使用方式。async/await 实际上是基于 Promise 的,它们让异步代码看起来像同步代码,并且使得异常处理变得更加容易。

async 函数会返回一个 Promise 对象,这个对象会 resolve 为该函数的返回值,或 reject 为该函数抛出的异常。await 关键字只能使用在 async 函数内部,await 会等待其后面的 Promise 对象 settled,然后将该 Promise 对象 resolved 的值作为返回值。如果 Promise 对象 rejected,则会向外 throw 一个异常。

下面是一个使用 async/await 的例子:

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

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

Promise.prototype.finally

Promise.prototype.finally 方法接受一个回调函数作为参数,它不管 Promise 对象是 resolved 还是 rejected,都会执行该回调函数。

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

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

总结

Promise 是一种用于异步编程的规范,可以让我们以一种更加可读和维护的方式处理异步操作。Promise 有三种状态:pending、fulfilled、rejected。Promise 对象通常会返回一个值,这个值在 fulfilled 或 rejected 状态下不一样。Promise 有很多常用的 API,例如 Promise.resolve、Promise.reject、Promise.all、Promise.race、Promise.then 和 Promise.catch。使用 async/await 可以让异步代码看起来像同步代码,并且使得异常处理变得更加容易。Promise.prototype.finally 方法可以在 Promise 对象 settle 之后执行指定操作。

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

纠错
反馈