ES8 Async/Await 的简介、使用与模式

阅读时长 5 分钟读完

前言

异步函数是现代 JavaScript 中的重要概念。在早期,我们通常使用回调函数处理异步操作,但随着时间的推移,这种方式变得越来越难以维护。Promises 帮助我们解决了这个问题。ES8 的 async/await 则使异步操作更为简单。在本文中,我们将学习关于 ES8 async/await 的一切。

ES8 Async/Await 是什么?

async/await 是 Promise 的一种高级表达方式,它简化了 Promise 的编写方式。这种语法使得异步操作的编写变得更为自然而简单,它减少了我们的错误和调试时间。async/await 语法允许我们将异步代码以同步的方式编写,它没有任何阻塞和等待。这种方法使我们的代码更便于理解和维护。async/await 语法使用了 "async" 和 "await" 两个关键字,async 被放置在函数前面,表示该函数将有异步操作,await 则是在调用异步操作时使用的,它将保持代码执行的暂停直到异步操作完成。async 函数总是返回 promises,无论该函数显式返回 promises 或其他值。它允许我们使用 "then" 语法来执行 promises,以使代码更易读。

使用 Async/Await

要使用 async/await,我们首先需要创建一个异步函数。异步函数通常会执行一些操作,例如读取数据或更新服务器上的值。由于异步函数执行可能需要一些时间,我们将不会从该函数立即返回。取而代之,我们返回一个 promises。promises 可以在异步操作完成后通知我们。然后,通过使用 await 表达式,我们可以在异步操作完成之前暂停执行。

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

如上所述,我们使用 async 关键字来声明一个异步函数 getName。我们调用了内置的 fetch API 来获取一个 GitHub 仓库,并等待其响应。然后,我们在获取到的数据中提取出 owner 属性,并将其返回给调用方。

异常处理

正常情况下,异步函数通常会成功完成,但在某些情况下,它们可能会失败。对于这种情况,我们需要捕获错误并进行适当的处理。在 async 函数内使用 try/catch 语句来捕获异步代码的错误。

对于前面的示例,我们可以添加一个 try/catch 块来处理任何失败的请求:

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

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

如上所示,我们添加了一个包含 try/catch 的异步函数 getName。当请求失败时(例如请求的数据不存在),我们将在控制台上发出错误消息。

Async/Await 模式

在编写异步代码时,我们遵循一些模式以实现最佳实践。下面是一些常用的模式。

串行执行异步函数

如果需要按顺序执行多个异步函数,我们可以使用 await 来等待上一个函数的完成,然后再执行下一个函数。

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

-----------

如上所述,我们使用 await 来等待数据1和数据2函数完成。请注意,这种方式适用于按顺序执行的操作,逐步执行多个异步操作。

并行执行异步函数

在某些情况下,我们可能需要并行执行多个异步函数。在这种情况下,我们创建一个 promises 数组来等待所有 promises 的完成,并使用 Promise.all() 方法将结果合并。

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

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

-----------

如上所述,我们使用了一个 promises 数组来存储获取用户和获取职位的 操作,然后使用 Promise.all() 方法等待所有 promises 的完成。该方法返回一个包含成功结果的数组。我们将数组存储在变量中,然后使用 await 关键字等待结果。

总结

ES8 的 async/await 语法使异步代码的编写变得简单快捷。它使异步操作变得更加标题,更容易管理和维护。我们可以使用 async/await 语句来写出更容易理解和快速完成代码。

在本文中,我们学习了 async/await 的使用方式,以及如何捕获并处理错误。我们还研究了常见的异步模式以及在平行和序列执行函数。

我们有任何问题或问题,在下面的注释中留言,我们将尽力回答。

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

纠错
反馈