Async/Await是如何工作的?请提供示例
在JavaScript中,async
和await
是用于简化异步操作的关键字,它们允许你以同步的方式编写异步代码,使得代码更易于阅读和维护。本文将介绍async
和await
的工作原理,并提供示例代码。
async
和await
简介
async
async
是一个关键字,用于声明一个函数是异步的。使用async
声明的函数会返回一个Promise
对象,该对象会在函数执行完成后解析。
await
await
是一个关键字,只能在async
函数内部使用。它用于等待一个Promise
的结果,暂停async
函数的执行,直到Promise
解析完成。
工作原理
-
使用
async
声明异步函数:当你在一个函数前加上async
关键字时,该函数会返回一个Promise
。 -
使用
await
等待Promise
:在async
函数内部,你可以使用await
关键字等待一个Promise
的结果。await
会暂停函数的执行,直到Promise
解析。 -
错误处理:
await
可以与try...catch
语句一起使用,以便在Promise
被拒绝时捕获错误。
示例代码
示例1:基本的异步函数
// 一个返回Promise的异步函数
function resolveAfter2Seconds() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Resolved after 2 seconds');
}, 2000);
});
}
// 使用async声明异步函数
async function asyncCall() {
const result = await resolveAfter2Seconds();
console.log(result); // 输出:Resolved after 2 seconds
}
// 调用异步函数
asyncCall();
在这个例子中,asyncCall
是一个async
函数,它等待resolveAfter2Seconds
函数的Promise
解析。
示例2:错误处理
async function asyncCallWithCatch() {
try {
const result = await resolveAfter2Seconds();
console.log(result);
} catch (error) {
console.error('An error occurred:', error);
}
}
// 调用异步函数
asyncCallWithCatch();
在这个例子中,如果resolveAfter2Seconds
函数的Promise
被拒绝,错误会被捕获并打印到控制台。
示例3:并发执行异步操作
async function fetchUsers() {
const user1 = fetchUser(1);
const user2 = fetchUser(2);
// 等待两个异步操作都完成
const [userData1, userData2] = await Promise.all([user1, user2]);
console.log(userData1, userData2);
}
async function fetchUser(userId) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(`User ${userId}`);
}, 1000);
});
}
// 调用异步函数
fetchUsers();
在这个例子中,fetchUsers
函数并发执行两个异步操作,并使用Promise.all
等待它们全部完成。
总结
async
和await
是JavaScript中处理异步操作的强大工具。它们允许你以近乎同步的方式编写代码,使得异步逻辑更加直观和易于理解。通过使用async
和await
,你可以简化代码,提高可读性,并有效地处理异步任务。