面试知识点 - Promise 详解

阅读时长 5 分钟读完

什么是 Promise?

Promise 是 JavaScript 中的一种对象,用来表示一个异步操作的最终完成(或失败)及其结果值。在使用 Promise 的过程中,一个 Promise 可以处于以下三种状态中的一种:

  1. Pending(进行中):表示 Promise 实例创建后,但它的最终结果还不清楚的状态;
  2. Fulfilled(已成功):表示 Promise 一步操作成功完成;
  3. Rejected(已失败):表示 Promise 一步操作失败。

Promise 的优势

使用 Promise 的好处在于它允许我们更好地处理异步代码,尤其是处理类似于 ajax 调用、图片加载等耗时操作。

在传统回调函数中,异步操作会由回调函数处理。Promise 通过将异步操作的状态抽象为一个对象,使得异步调用更加直观和易于维护。

Promise 的基本用法

创建 Promise 实例

可以使用实例化 Promise 构造函数,其构造函数有一个函数参数(也称“执行函数”),该函数参数还有两个函数参数(resolve,reject):

Promise 实例化的状态

当 Promise 实例化时,会开始进行对应的异步操作。Promise 的三种状态中的一种就是这个实例化操作的结果。Promise 的三种状态为:

  • 进行中(Pending):这个异步操作正在进行中,不能确定其最终结果。
  • 已成功(Fulfilled):异步操作已成功,Promise 対应完成。
  • 已失败(Rejected):异步操作已失败。

例如:

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

Promise 实例化的状态改变

Promise 实例化的状态只有两种改变可能性:

  1. 当 Promise 实例执行函数中的异步操作成功时,调用 resolve 函数,并且将其结果传递给回调函数。Promise 实例化状态从进行中(Pending)改变为已成功 (Fulfilled)。

  2. 当 Promise 实例执行函数中的异步操作失败时,调用 reject 函数。Promise 实例化状态从进行中(Pending)改变为已失败(Rejected)。

Promise.then 方法

当 Promise 实例的状态变为已成功(Fulfilled)时,可以通过 then 方法获取异步操作的结果。then() 方法可以接受两个回调函数参数:

  • 第一个回调函数是异步操作成功时所执行的处理函数;
  • 第二个回调函数是异步操作失败时所执行的处理函数。

重要的注意事项

状态不可变

Promise 的一旦状态被改变,就不可以再次修改了。一个成功的 Promise 不能再次成为失败的 Promise,反之亦然。一旦状态被修改,所有的 Promise 会立即调用相应的回调函数,不管 Promise 实例现在的状态与回调函数相符合还是不相符。

Promise 链

在 Promise 中,常常遇到 Promise 链的用法,也就是将多个 Promise 实例化链接在一起。

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

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

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

结论

本篇文章对 Promise 的意义与具体的实现方式进行了详细介绍,希望读者们可以上手试试,并且能在实践中发现更多的问题。如果你在面试中遇到了 Promise 的问题,希望可以通过本文所提供的技能点去解决问题。

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

纠错
反馈