Promise 创建和使用详解

阅读时长 5 分钟读完

Promise 概述

Promise 是一种异步编程的解决方案,它可以减少回调函数嵌套的问题,使得代码更易读,更易维护。Promise 可以看作是一种容器,里面存放了某个未来才会结束的事件(通常是一个异步操作)的结果。

Promise 有三个状态:pending(等待中)、fulfilled(已完成)和rejected(已拒绝)。当 Promise 对象的状态从 pending 变为 fulfilled 或者 rejected 时,就会触发 then 方法指定的回调函数或者 catch 方法指定的回调函数。

Promise 创建

Promise 对象通过 new 关键字来创建,创建时需要传入一个 executor 函数,它接收 resolve 和 reject 两个参数,表示 Promise 的状态为 fulfilled 或者 rejected。

Promise 示例

下面是一个使用 Promise 的示例,假设我们有一个异步函数 fetchUser,它从服务器上获取一个用户的信息,并返回一个 Promise 对象。

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

Promise 使用

then 方法

then 方法可以接收两个回调函数作为参数,分别表示 fulfilled 和 rejected 两种状态的回调函数。当 Promise 对象状态为 fulfilled 时,会调用第一个回调函数;当状态为 rejected 时,会调用第二个回调函数。then 方法可以被链式调用,这样可以避免回调嵌套的问题。

catch 方法

catch 方法用于捕获 Promise 对象状态变为 rejected 时的错误信息。它是 then 方法的简化版,只传递一个错误回调函数作为参数。

Promise.all 方法

Promise.all 方法可以将多个 Promise 对象包装成一个新的 Promise 对象,它接收一个 Promise 数组作为参数。当所有 Promise 对象的状态都变为 fulfilled 时,新的 Promise 对象的状态才会变为 fulfilled,并依次返回每个 Promise 对象的结果。当有任何一个 Promise 对象状态变为 rejected 时,新的 Promise 对象的状态就会变为 rejected,并且第一个被 rejected 的 Promise 对象的错误信息会被传递给 catch 方法的回调函数。

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

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

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

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

结论

Promise 的出现使得异步编程变得更加简单优雅,它消除了回调嵌套的问题,使得代码更易读,更易维护。在实际开发中,我们需要掌握 Promise 的基本用法,包括创建、使用 then 和 catch 方法、使用 Promise.all 方法等。同时,我们还需要注意 Promise 的错误处理,避免出现未处理的异常导致系统崩溃的情况。

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

纠错
反馈