理解 JavaScript Promise 中的 Deferred

阅读时长 4 分钟读完

在 JavaScript Promise 中,Deferred 是一个很重要的概念。本文将会对 Deferred 进行详细的解释,并给出代码示例作为参考。

什么是 Deferred

Deferred 是 Promise 的一个扩展接口,可以理解为对 Promise 的封装。在 Promise 中,一个 Promise 要么处于 Pending(等待)状态、Fulfilled(已完成)状态或者 Rejected(已失败)状态。而 Deferred 就是提供了一种途径来主动改变 Promise 的状态。

我们可以使用 Deferred 来表示一个尚未完成的异步操作,并在异步操作完成后主动改变 Promise 的状态。这样,我们就可以直接通过 Promise 的 then 方法等待异步操作的结果。

Deferred 的用法

在 jQuery Deferred 中,使用 Deferred 构造函数来创建 Deferred 对象。可以通过 Deferred 对象的 resolve 和 reject 方法来主动改变 Promise 的状态,resolve 方法将 Promise 状态改变为 Fulfilled,而 reject 方法将 Promise 状态改变为 Rejected。

以下是 Deferred 的基本使用示例:

Deferred 应用示例

以下是一个 Deferred 应用的示例,用于获取用户输入的地址,并将地址转换为经纬度坐标。

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

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

在这个示例中,我们首先创建了一个 getAddress 函数,用于获取用户输入的地址。当用户输入地址后,我们使用百度地图 API 将地址转换为经纬度坐标,并将转换后的坐标通过 Deferred 的 resolve 方法,将 Promise 的状态改变为 Fulfilled。如果地址解析失败,则使用 Deferred 的 reject 方法,将 Promise 的状态改变为 Rejected。

接着,我们通过调用 getAddress 函数返回的 Promise 对象的 then 方法来获取经纬度坐标,并打印输出。

总结

Deferred 是 Promise 的一个扩展接口,可用于主动改变 Promise 的状态。在应用中,我们可以使用 Deferred 来表示一个尚未完成的异步操作,并在异步操作完成后,使用 resolve 或 reject 方法来改变 Promise 的状态,最终通过 Promise 的 then 方法等待异步操作的结果。

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

纠错
反馈