返回

前端人必须了解的Promise/async await

前端

前言

JavaScript 是一种单线程语言,这意味着它一次只能执行一个任务。当 JavaScript 执行耗时操作时,比如网络请求或文件读取,它会将这些操作交给浏览器来处理,然后继续执行其他任务。当浏览器完成耗时操作后,它会将结果返回给 JavaScript。

在早期,前端开发人员使用回调函数来处理异步操作。回调函数是一种在异步操作完成后执行的函数。然而,使用回调函数来处理异步操作会使代码变得难以阅读和维护。

Promise 和 async/await 是两种新的 JavaScript 特性,它们可以帮助前端开发人员更轻松地处理异步操作。

Promise

Promise 是一个对象,它表示一个异步操作的最终完成或失败。Promise 可以处于三种状态:

  • 待定(pending):异步操作尚未完成。
  • 已完成(fulfilled):异步操作已完成,并且成功返回了结果。
  • 已拒绝(rejected):异步操作已完成,但失败了。

Promise 可以使用 .then() 方法来处理其结果。.then() 方法接受两个参数:

  • 成功回调函数:当 Promise 已完成并且成功返回结果时,会调用成功回调函数。
  • 失败回调函数:当 Promise 已完成但失败时,会调用失败回调函数。

以下是一个使用 Promise 处理异步操作的示例:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Hello, world!");
  }, 2000);
});

promise.then((result) => {
  console.log(result); // "Hello, world!"
});

async/await

async/await 是两个新的 JavaScript ,它们允许前端开发人员以同步的方式编写异步代码。

要使用 async/await,首先需要使用 async 关键字声明一个函数。然后,可以使用 await 关键字来等待异步操作完成。

以下是一个使用 async/await 处理异步操作的示例:

async function greet() {
  const result = await new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Hello, world!");
    }, 2000);
  });

  console.log(result); // "Hello, world!"
}

greet();

Promise 和 async/await 的区别

Promise 和 async/await 都是用于处理异步操作的 JavaScript 特性,但它们之间存在一些区别。

  • Promise 是一个对象,而 async/await 是两个关键字。
  • Promise 可以使用 .then() 方法来处理其结果,而 async/await 可以使用 await 关键字来等待异步操作完成。
  • Promise 可以与其他 Promise 组合使用,而 async/await 不能。

总结

Promise 和 async/await 都是非常有用的 JavaScript 特性,它们可以帮助前端开发人员更轻松地处理异步操作。Promise 和 async/await 之间存在一些区别,但它们都是非常强大的工具。