返回

JavaScript Promise 扫盲兼快速上手 async/await

前端

处理 JavaScript 异步操作:Promise vs. async/await

作为一门单线程语言,JavaScript 按顺序执行代码。然而,随着异步操作(例如网络请求、文件读写)在实际开发中的广泛使用,JavaScript 代码执行顺序的连续性被打乱,给代码的可理解性和可维护性带来了挑战。

Promise:异步操作的传统处理方式

Promise 是 JavaScript 中处理异步操作的一种方法,表示异步操作的最终结果或失败,并包含结果值。当异步操作完成后,Promise 的状态会从 pending 变为 resolved 或 rejected,我们可以使用 then() 方法来处理异步操作的结果。

以下代码示例展示了如何使用 Promise 处理网络请求:

fetch('https://example.com')
  .then(response => {
    if (response.ok) {
      return response.json();
    } else {
      throw new Error('Network response was not ok.');
    }
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('Error in fetching data:', error);
  });

async/await:ES8 中的现代处理方式

async/await 是 ES8 中引入的特性,使异步代码具有同步代码的外观。async 函数可以包含 await 表达式,该表达式的作用是暂停 async 函数的执行,直到异步操作完成。

以下代码示例展示了如何使用 async/await 处理网络请求:

async function fetchAndPrintData() {
  try {
    const response = await fetch('https://example.com');
    if (response.ok) {
      const data = await response.json();
      console.log(data);
    } else {
      throw new Error('Network response was not ok.');
    }
  } catch (error) {
    console.error('Error in fetching data:', error);
  }
}

fetchAndPrintData();

Promise 和 async/await 的选择

Promise 和 async/await 都是处理 JavaScript 异步操作的有效方式,各有优缺点。

Promise 是一种更传统的处理异步操作的方式,提供了对异步操作的细粒度控制。而 async/await 是一种更现代的方式,使异步代码更易于编写和阅读。

常见问题解答

  1. 什么是异步操作?

    • 异步操作是不立即完成,而是在后台执行的操作,例如网络请求或文件读写。
  2. Promise 如何工作?

    • Promise 表示一个异步操作的最终结果或失败,并包含结果值。当异步操作完成后,Promise 的状态会变为 resolved 或 rejected,我们可以使用 then() 方法来处理异步操作的结果。
  3. async/await 如何工作?

    • async/await 使我们可以使用 await 表达式暂停 async 函数的执行,直到异步操作完成。
  4. Promise 和 async/await 有什么区别?

    • Promise 提供了对异步操作的细粒度控制,而 async/await 使异步代码更易于编写和阅读。
  5. 在实际开发中,应该选择 Promise 还是 async/await?

    • 这取决于应用程序的具体要求和开发者的偏好。一般来说,async/await 更易于使用,但 Promise 提供了更多控制。