返回

从异步到同步:揭秘 JS 中 async 和 await 的奥秘

前端

异步编程与同步编程

在计算机科学中,异步编程和同步编程是两种截然不同的编程范式。

  • 异步编程 :异步编程允许程序在等待 I/O 操作(例如网络请求或文件读写)完成时继续执行其他任务。当 I/O 操作完成时,程序将被通知并继续执行。
  • 同步编程 :同步编程则要求程序在 I/O 操作完成之前一直等待。只有当 I/O 操作完成后,程序才能继续执行。

在 JavaScript 中,异步编程通常使用回调函数或 Promise 对象来实现。回调函数是一种在异步操作完成后被调用的函数,而 Promise 对象则是一种表示异步操作结果的特殊对象。

async 和 await

async 和 await 是 JavaScript 中引入的两个,它们可以将异步代码转换为同步代码。

  • async :async 关键字可以将一个函数标记为异步函数。异步函数可以包含 await 表达式,await 表达式可以暂停函数的执行,直到异步操作完成。
  • await :await 关键字可以用于暂停函数的执行,直到异步操作完成。await 表达式只能出现在 async 函数中。

async 和 await 的工作原理

为了理解 async 和 await 的工作原理,我们先来看一个简单的例子:

async function readFile(filename) {
  const contents = await fs.readFile(filename);
  return contents;
}

在这个例子中,readFile 函数被标记为异步函数。函数体中有一个 await 表达式,它暂停函数的执行,直到文件读取操作完成。当文件读取操作完成后,函数将继续执行并返回文件的内容。

async 和 await 的工作原理可以归结为以下几点:

  • 当遇到 await 表达式时,函数的执行会被暂停。
  • JavaScript 引擎会创建一个 Promise 对象,并将其与 await 表达式关联起来。
  • 当异步操作完成后,Promise 对象的状态会变为已完成,并且包含异步操作的结果。
  • JavaScript 引擎会恢复函数的执行,并将 Promise 对象的值赋给 await 表达式。

async 和 await 的优点

async 和 await 具有以下优点:

  • 使异步代码更易于编写和阅读。
  • 提高代码的可维护性。
  • 避免回调函数地狱。
  • 提高程序的性能。

async 和 await 的应用场景

async 和 await 可以用于各种场景,包括:

  • 网络请求
  • 文件读写
  • 数据库操作
  • 定时器
  • 事件处理

结论

async 和 await 是 JavaScript 中非常强大的工具,它们可以将异步代码转换为同步代码,从而使异步编程变得更加容易。在实际开发中,async 和 await 可以极大地提高开发效率,并使代码更加易于维护。