精通 ES7 async 和 await

阅读时长 5 分钟读完

什么是 async 和 await

async 和 await 是 ECMAScript 2017 (ES7) 中的一个新特性,它们为 JavaScript 中的异步编程提供了一种更优雅的解决方案。

  • async 是用来定义一个异步函数的关键字。
  • await 是用来等待一个异步操作完成,并返回它的结果。

在过去,我们通常使用回调函数或者 Promise 来处理异步操作。但是,回调函数的嵌套容易让代码变得难以维护,而 Promise 的 then() 方法则会产生不必要的回调地狱。而使用 async 和 await 可以让异步代码看起来像同步代码,更加清晰易懂。

如何使用 async 和 await

定义一个 async 函数

使用 async 关键字可以定义一个异步函数,函数体内的代码会自动转化为 Promise。

等待一个异步操作的结果

使用 await 关键字可以等待一个异步操作完成,并返回它的结果。在 await 后面的代码只有在操作完成后才会执行。

在上面的例子中,fetchData() 函数会等待 fetch() 和 response.json() 异步操作完成后,才会返回 JSON 数据。如果其中任何一个操作出现错误,await 后面的代码将不会被执行,错误信息会被传递到 catch() 方法中。

处理 async 函数的错误

async 函数中的错误可以使用 try...catch 块来捕获。

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

在上面的例子中,如果有任何报错,错误信息会被传递到 catch() 方法中,我们可以在其中打印错误信息、记录错误日志或者执行特定的错误处理逻辑。

async 函数的阻塞特性

async 函数的阻塞特性意味着 await 关键字可以中断异步操作的执行,等待异步操作完成后才会继续。

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

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

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

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

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

在上面的例子中,我们通过 console.log() 打印出了执行顺序,可以看到 async 函数中的 await 操作阻止了 fetch() 操作的继续执行,直到响应数据被解析出来后才会继续执行。

使用 async 和 await 的技巧和建议

  • 使用 async 和 await 时,应该尽可能地减少嵌套。
  • 对于一些必须顺序执行的异步操作,应该使用 await 来等待前一个操作完成后再执行下一个操作。
  • 可以使用 Promise.all() 对多个异步操作进行并行处理。
  • 在编写 async 函数时,应该注意其返回结果的数据类型和格式。
  • 在处理 async 函数的错误时,应该尽可能地详细记录错误信息。

示例代码

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

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

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

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

在这个示例代码中,我们定义了一个异步函数 fetchData() 用来获取 Github 上的用户列表数据,并在函数中使用了 try...catch 块来捕获错误信息。然后我们使用 async 函数 renderData() 来渲染用户列表,将 li 元素添加到名为 usersList 的列表中。最后我们调用 renderData() 函数来展示页面。

总结

使用 async 和 await 可以让异步代码看起来像同步代码,更加清晰易懂。要想熟练掌握 async 和 await,需要多写一些异步操作,并善于使用 Promise 和 try...catch 块来处理异步操作的错误信息。你也可以通过阅读 Promise 的文档来更好地理解 async 和 await。

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

纠错
反馈