async/await用法详解_async await解决了什么问题
async 和 await 是 JavaScript 中处理异步操作的新方法,它们使得异步代码的编写和同步代码一样直观易懂。以下是 async 和 await 的用法详解:
async
async 关键字用于声明一个函数是异步的,这意味着该函数会返回一个 Promise 对象。如果函数正常执行结束,则 Promise 会以 resolve 方式解析;如果函数中抛出错误,则 Promise 会以 reject 方式解析。
声明一个异步函数
// 声明异步函数
async function asyncFunction() {
// 异步操作
}
在异步函数中,你可以使用 await 关键字等待一个 Promise 解析完成。
异步函数返回值
// 返回一个Promise
async function asyncFunction() {
return 'Hello World';
}
asyncFunction().then(value => {
console.log(value); // 输出:Hello World
});
如果异步函数中没有使用 await,则函数的行为和使用 .then 和 .catch 处理 Promise 没有区别。
await
await 关键字只能在 async 函数内部使用,它用于等待一个 Promise 解析完成。await 会暂停函数的执行,直到等待的 Promise 被解决(resolved)或被拒绝(rejected)。
基本用法
async function asyncFunction() {
const result = await Promise.resolve('Hello World');
console.log(result); // 输出:Hello World
}
如果 Promise 被拒绝,await 会抛出一个错误,你可以用 try...catch 语句捕获这个错误。
错误处理
async function asyncFunction() {
try {
const result = await Promise.reject('Error occurred');
} catch (error) {
console.error(error); // 输出:Error occurred
}
}
并发处理多个异步操作
await 可以并发处理多个异步操作,而不是顺序执行。
async function asyncFunction() {
const promise1 = Promise.resolve('First');
const promise2 = Promise.resolve('Second');
// 并发执行
const result1 = await promise1;
const result2 = await promise2;
console.log(result1, result2); // 输出:First Second
}
异步迭代器
async 还可以和 for...await...of 一起使用,用于异步迭代器。
async function asyncFunction() {
async function* asyncGenerator() {
yield Promise.resolve('First');
yield Promise.resolve('Second');
}
for await (const value of asyncGenerator()) {
console.log(value); // 输出:First 和 Second
}
}
注意事项
- await 只能在 async 函数内部使用。
- await 后面必须跟一个 Promise 对象,否则会抛出错误。
- 使用 await 时,如果 Promise 被拒绝,会抛出错误,需要用 try...catch 捕获。
- async 函数总是返回一个 Promise,即使函数中没有 await 表达式。
async 和 await 的引入使得异步代码的编写更加直观和易于管理,它们已经成为现代JavaScript异步编程的标准工具。