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
成为一种非阻塞的异步操作方式。