Promise 中的 then() 和 catch() 方法详解

阅读时长 6 分钟读完

随着前端开发的快速发展,异步编程已经成为了开发中的一个重要部分。在异步编程中,Promise 是一种强大的技术,可用于处理异步操作。Promise 中的 then() 和 catch() 方法是 Promise 必不可少的一部分,我们在使用 Promise 时一定不能忽略它们。本文将详细介绍 Promise 中的 then() 和 catch() 方法,并给出代码示例和实际应用案例,希望对读者有所帮助。

了解 Promise

在开始讲述 then() 和 catch() 方法之前,先浏览一下 Promise 的基本知识。

简单来说,Promise 是一种将异步代码进行抽象的机制,它允许我们通过链式调用 then() 和 catch() 方法来处理异步操作。Promise 有以下三个状态:

  1. pending: Promise 的初始化状态,表示该异步操作还未完成
  2. fulfilled: 表示异步操作已经完成,并获得了一个值
  3. rejected: 表示异步操作已经完成,但返回了一个错误

then() 方法

then() 方法是 Promise API 中最基本的方法之一。它接收两个参数:成功回调函数和失败回调函数。

成功回调函数将在 Promise 执行成功并返回一个值时被调用。它的返回值将作为下一个 then() 方法的输入。

失败回调函数将在 Promise 失败时被调用。它接收一个错误对象,该对象指示 Promise 对象的拒绝原因。失败回调函数还可以选择何时重新抛出错误或返回一个默认值,可能是一个空值。

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

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

-------
  -------------- -- -
    --------------------
  --
  -------------- -- -
    -------------------
  --
展开代码

在这个例子中,我们创建了一个 Promise 对象并在其 resolve 方法中传递一个字符串“成功”。然后,我们使用 then() 方法链接成功回调函数,打印出“成功”。

catch() 方法

如果在 then() 方法的成功回调函数中没有正确处理 Promise 对象的情况,或者在其中出现了错误,那么我们需要 catch() 方法来处理错误。catch() 方法接收一个处理错误的回调函数。

值得注意的是,catch() 方法只可以捕获 Promise 执行中出现的错误,而不能捕获未处理的异常或全局错误。

下面看一下 catch() 方法的使用示例:

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

-------
  -------------- -- -
    --------------------
  --
  -------------- -- -
    ---------------------------
  --
展开代码

在这个例子中,我们创建了一个 Promise 对象并在其 reject 方法中传递一个错误对象'失败'。然后,我们使用 catch() 方法捕获了错误,并打印出错误信息。

then() 和 catch() 的链式调用

then() 和 catch() 方法可以实现链式调用,这使得我们可以非常方便地处理 Promise 存在的多个分支。

下面是一个链式调用的示例:

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

-------
  -------------- -- -
    -------------------------
    ------ ------ ---------
  --
  -------------- -- -
    --------------------
    ----- --- ----------------
  --
  -------------- -- -
    --------------------------- -- ------
  --
展开代码

在这个例子中,我们首先创建一个 Promise 对象,并在它的 resolve 方法中传递一个对象。我们使用 then() 方法来访问这个对象中包含的名称,并返回了另一个 Promise 对象,以展示 Promise 对象的链式调用。接下来,我们在第二个 then() 方法中抛出了一个错误,并在 catch() 方法中捕获了它。在 catch() 方法中,我们使用 console.log() 打印出错误信息。

实际应用案例

当我们使用 AJAX 调用时,Promise 对象就有了很好的应用场景。下面的代码演示了如何使用 then() 和 catch() 方法来使用 Promise 处理 AJAX 请求:

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

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

-------------------------------------
  -------------- -- -
    --------------------
    ------ -------------------
  --
  -------------- -- -
    --------------------
  --
  -------------- -- -
    ---------------------------
  ---
展开代码

在这个例子中,我们使用 XMLHTTPRequest 对象请求随机用户 API。在 then() 方法中,我们处理了请求返回的数据,并在第二个 then() 方法中打印出处理后的结果。如果请求失败,则 catch() 方法将捕获错误并打印出错误信息。

结语

本文对 Promise 中的 then() 和 catch() 方法进行了详细介绍,并给出了代码示例和实际应用案例。理解和熟练使用 Promise 中的 then() 和 catch() 方法将帮助我们处理异步编程中的复杂逻辑,提高开发效率和代码质量。

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

纠错
反馈

纠错反馈