如何处理 Promise 的 Rejected 状态

在前端开发中,Promise 已经成为了一个必不可少的概念。它允许我们以一种更加清晰、简洁的方式处理异步操作。Promise 有三种状态:PendingResolvedRejectedPending 状态表示操作正在进行,Resolved 状态表示操作已经成功完成,而 Rejected 状态表示操作失败。在本文中,我们将重点讨论如何处理 Promise 的 Rejected 状态。

Promise 的 Rejected 状态

在 Promise 中,当一个操作失败时,它会进入 Rejected 状态。在使用 Promise 处理异步操作过程中,错误是不可避免的。例如,当我们请求一个不存在的 URL 时,返回的 HTTP 状态码将是 404。在这种情况下,Promise 对象的状态将为 Rejected

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

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

如上述代码所示,我们可以使用 reject 方法将 Promise 设置为 Rejected 状态,并在 catch 方法中处理错误。

错误处理

在处理 Promise 的 Rejected 状态时,我们通常需要制定一个错误处理方式。一种方式是在 then 方法中,使用第二个回调方法作为错误处理函数。

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

但是当我们在多处使用 Promise 时,每次都要传入错误处理函数会产生重复的代码。一个更好的做法是在全局范围内定义一个错误处理程序。这可以通过 Promise.prototype.catch 实现。

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

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

如上述代码所示,我们在 Promise.prototype.catch 上定义一个错误处理程序,以便在错误发生时自动调用。在使用该程序时,我们不需要传递第二个回调函数。如果需要自定义处理方式,可以在捕获全局错误之前使用 catch 方法。

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

重新处理

在某些情况下,我们可能想要在 Promise 状态已经为 Rejected 时继续处理。例如,在连接到服务器时,如果我们得到一个网络错误,我们可以尝试重新连接。这称为“重试”。

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

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

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

在上述代码中,我们在成功处理 Promise 时返回数据。但是当请求失败时,我们将抛出异常。在 catch 块中,我们检查尝试次数。如果已经尝试三次,我们将抛出异常,否则等待 1 秒并重试。最后,我们使用 makeRequestWithRetry 函数调用 Promise。

结论

处理 Promise 的 Rejected 状态是前端开发中不可避免的一部分。在本文中,我们讨论了如何处理错误、重试和自定义错误处理程序。在实际开发过程中,了解这些概念将使我们更好地处理 Promise,并使我们的代码更加健壮和可靠。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66ff9ca21b0bf82c71cce7df