Promise 的错误处理及推荐处理方式

阅读时长 5 分钟读完

在前端开发中,经常需要处理异步请求,而 Promise 就是一种方便处理异步操作的技术。但是当异步操作出错时,Promise 也需要正确的错误处理方式。本文将会介绍 Promise 的错误处理及推荐处理方式,并使用示例代码来加深理解。

Promise 的错误处理方式

Promise 可以通过两种方式处理错误:返回 rejected 状态的 Promise 或使用 catch() 方法捕获错误。

返回 rejected 状态的 Promise

当异步操作出错时,可以返回一个 rejected 状态的 Promise。如下是一个示例代码:

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

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

在 getId() 函数中,如果传入的 id 小于等于 0,将返回一个 rejected 状态的 Promise,并将错误信息传递给下一个 catch() 函数。catch() 函数将会捕获到错误并进行处理。

使用 catch() 方法捕获错误

另一种处理 Promise 错误的方式是使用 catch() 方法捕获错误。使用这种方式时,需要在 Promise 链的最后调用 catch() 方法,如下所示:

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

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

这个示例与上面的示例的区别仅在于我们使用了 catch() 方法来捕获错误,而不是在 getId() 函数中返回一个 rejected 状态的 Promise。

推荐的 Promise 错误处理方式

Promise 中的错误应该被正确地处理,这可以通过以下两种方式来实现:

返回详细的错误信息

当处理异步操作时,Promise 应该返回具有详细错误信息的错误对象。这对于调用函数的开发者及时处理错误非常有帮助。

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

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

在这个示例中,我们返回了一个带有详细错误信息的 Error 对象,并在 catch() 函数中将其打印到控制台中。

使用自定义错误类型

虽然 Error 对象非常方便,但是更好的方式是使用自定义的错误类型。这可以通过将自定义 Error 类型继承自 Error 对象来实现。具体实现代码如下所示:

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

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

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

在这个示例中,我们使用了一个自定义的 AppError 类型,它继承自 Error 类型,并添加了 statusCode、status 和 isOperational 属性。这样,我们就可以打印出更详细的错误信息了。

结论

在本文中,我们介绍了 Promise 的错误处理方式,分别是返回 rejected 状态的 Promise 或使用 catch() 方法来捕获错误。我们还介绍了推荐的 Promise 错误处理方式,包括返回详细的错误信息和使用自定义的错误类型。因此,在处理异步请求时,应该始终使用正确的 Promise 错误处理方法来确保正确、可靠和可维护的代码。

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

纠错
反馈