📜  什么是异步函数 - Javascript (1)

📅  最后修改于: 2023-12-03 14:49:12.159000             🧑  作者: Mango

异步函数 - JavaScript

在 JavaScript 中,异步函数是一种可通过 async 关键字定义的特殊函数。异步函数可以执行一些耗时的操作(例如网络请求或者文件读写),而无需阻塞程序的执行。

异步函数能够通过 await 关键字暂停并等待一个异步操作的完成。这样做可以让程序以非阻塞的方式执行,提高程序的性能和响应性。异步函数通常与 Promise 对象一起使用,以便更好地处理异步操作的结果。

如何定义异步函数

要定义一个异步函数,只需在函数声明或函数表达式前面加上 async 关键字。以下是定义异步函数的示例:

async function fetchData() {
  // 异步操作
}

const fetchUserData = async () => {
  // 异步操作
};
await 关键字

在异步函数中,可以使用 await 关键字来暂停函数的执行,等待一个 Promise 对象的解析结果。await 关键字只能在异步函数中使用。

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}

上述示例中,await fetch('https://api.example.com/data') 表达式会暂停 fetchData 函数的执行,直到 promise 对象(由 fetch 返回)被解析为一个值。然后,函数会继续执行,将解析后的数据存储在 data 变量中并返回。

处理异常

在异步函数中,可以通过 trycatch 语句来捕获和处理异步操作中的异常。

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Error fetching data:', error);
    throw error;
  }
}

上述示例中,如果异步操作过程中发生了错误,控制流会跳转到 catch 代码块,从而处理错误并抛出异常。

使用异步函数

异步函数通常作为 Promise 对象的替代方法,因为它们可以更直观地处理异步操作和异常。以下是使用异步函数的示例:

fetchData()
  .then((data) => {
    console.log('Fetched data:', data);
  })
  .catch((error) => {
    console.error('Error:', error);
  });

上述示例中,fetchData() 函数返回一个 Promise,并在 Promise 被解析时执行对应的 then 代码块,或者在 Promise 被拒绝时执行对应的 catch 代码块。

这样,异步函数使得处理异步操作更加简洁和可读,同时减少了回调地狱的情况。

请注意,异步函数在 ES2017(或称 ES8)中引入,因此需要类似 Babel 的工具进行转译以确保在旧版 JavaScript 引擎中的兼容性。