js中的async 和 await

文章类型:ES6

发布者:admin

发布时间:2023-05-17

async 和 await 是 JavaScript 中用于处理异步操作的关键字,主要是解决异步编程

一:定义

1:async 用于声明一个函数是异步函数,意味着函数内部可能包含异步操作,会返回一个 Promise 对象

2:await 用于等待一个 Promise 对象的解析(即异步操作的结果)。只能在 async 函数内部使用。当 await 关键字被执行时,它会暂停函数的执行,直到 Promise 对象被解析或拒绝

二:区别

1:使用方式:async 用于声明一个异步函数,将普通函数转换为异步函数。await 则用于等待一个 Promise 对象的解析,只能在异步函数内部使用。

2:控制流:使用 async 和 await 可以使异步代码的控制流更具可读性。通过在异步函数内使用 await,可以暂停函数的执行,直到等待的 Promise 对象被解析。避免回调地狱(callback hell)和使用复杂的 Promise 链。

3:错误处理:使用 async 和 await 时,可以使用 try...catch 块来捕获异步操作中的错误。在 try 块中使用 await 等待一个可能产生错误的异步操作,然后在 catch 块中处理错误。

4:返回值:async 函数总是返回一个 Promise 对象,状态和值取决于异步函数内部的执行结果。如果函数内部没有显式返回值,则 Promise 的解析值为 undefined。

三:总结

1:async 和 await 是用于简化异步操作的关键字。它们使得异步代码更易于理解和编写,并提供了更直观的控制流和错误处理机制

四:代码

// 异步函数,模拟一个异步操作,返回一个 Promise
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = "Async data";
      resolve(data);
    }, 2000);
  });
}

// 使用 async 和 await 处理异步操作
async function fetchDataAsync() {
  try {
    console.log("Fetching data...");
    const result = await fetchData(); // 等待异步操作的结果
    console.log("Data received:", result);
  } catch (error) {
    console.error("Error:", error);
  }
}

// 调用异步函数
fetchDataAsync();
console.log("After fetchDataAsync");