async/await 是 JavaScript 中处理异步操作的一种新方式,它使得异步代码能够以同步的方式书写,从而提高了代码的可读性和可维护性。
async
async 是一个函数修饰符,用于声明一个函数是异步的。一个 async 函数总是返回一个 Promise 对象。如果在 async 函数中返回一个非 Promise 的值,那么 JavaScript 会自动将这个值包装成一个 Promise 对象。
await
await 是一个操作符,只能在 async 函数内部使用。它用于等待一个 Promise 对象解析完成,并返回解析后的值。如果 Promise 被拒绝,await 会抛出一个错误。
示例
下面是一个使用 async/await 的简单示例,用于模拟异步获取数据:
// 假设 getData 是一个返回 Promise 的函数
function getData() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Hello, World!'); }, 1000); });
} // 使用 async/await 处理异步操作
async function fetchData() { try { const data = await getData(); // 等待 getData 的 Promise 解析完成 console.log(data); // 输出: Hello, World! } catch (error) { console.error('Error:', error); }
} fetchData(); // 调用 fetchData 函数
优点
- 可读性:
async/await使得异步代码看起来像同步代码,这大大提高了代码的可读性。 - 错误处理:通过
try/catch可以方便地捕获await操作中抛出的错误。 - 基于 Promise:
async/await是建立在 Promise 的基础之上的,这意味着它与其他 Promise-based API 兼容良好。 - 简洁性:使用
async/await可以避免使用.then()和.catch()链,使代码更加简洁。
注意事项
await只能在async函数内部使用。- 如果在
async函数外部使用await,JavaScript 会抛出一个语法错误。 await会暂停async函数的执行,并等待 Promise 解析完成。在此期间,JavaScript 引擎可以执行其他任务(如处理其他事件或运行其他代码)。这使得async/await成为一种非阻塞的异步操作方式。