ES8 中的 async/await 如何处理异常?

在 JavaScript 中,异常处理一直是一个重要的主题。在 ES6 中,Promise 的出现极大地提高了异常处理的能力。而在 ES8 中,async/await 的出现更是让异步编程变得更加简单和容易理解。但是,即使使用 async/await,我们仍然需要处理异常。

async/await 简介

async/await 是 ES8 中新增的异步编程语法糖,它使得异步代码看起来像同步代码,更加易于理解和维护。async/await 基于 Promise,它可以在函数内部使用 await 关键字等待 Promise 对象的结果,而无需使用复杂的 then() 和 catch() 方法。

下面是一个简单的 async/await 示例:

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

在这个示例中,fetchData() 函数返回一个 Promise 对象,它等待 fetch() 方法返回一个 Response 对象,然后等待该 Response 对象的 json() 方法返回一个 Promise 对象。最后,我们打印出了从 GitHub API 获取的 JSON 数据。

处理异常

虽然 async/await 简化了异步编程,但是在处理异常时仍然需要注意一些细节。在 async 函数中,如果抛出异常,该异常将被转换为一个被拒绝的 Promise 对象,并且可以使用 try/catch 语句在 async 函数外部捕获该异常。

下面是一个示例,演示如何在 async 函数中处理异常:

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

在这个示例中,我们使用 try/catch 语句捕获了异常。如果 fetch() 或 json() 方法抛出了异常,我们将在控制台中打印出该异常。

另外,我们还可以使用 Promise 对象的 catch() 方法处理异常。在 async 函数中,如果一个 Promise 被拒绝,该异常可以通过返回一个被拒绝的 Promise 对象来传递给调用方。

下面是一个使用 Promise 的 catch() 方法处理异常的示例:

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

在这个示例中,如果 fetchData() 函数返回的 Promise 被拒绝,我们将在控制台中打印出异常。

总结

在 ES8 中,async/await 使得异步编程变得更加简单和易于理解。但是,在处理异常时仍然需要注意一些细节。我们可以使用 try/catch 语句或 Promise 的 catch() 方法来处理异常,以确保我们的应用程序能够正常工作。

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