async/await
是一种用于处理异步操作的新方法,它建立在 Promise 的基础上,让异步代码看起来、表现起来更像同步代码。下面是 async/await
的一些常见用法:
1. 定义异步函数
使用 async
关键字可以定义一个异步函数。这样的函数总是返回一个 Promise 对象。
async function fetchData() {
// 异步操作,例如网络请求
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
2. 等待异步操作完成
在 async
函数内部,可以使用 await
关键字来等待一个 Promise 完成,并返回它的结果。
async function main() {
try {
const data = await fetchData(); // 等待 fetchData 完成并返回数据
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
3. 错误处理
await
表达式如果等待的 Promise 被拒绝(rejected),则会抛出一个异常。你可以使用 try...catch
语句来捕获这个异常。
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
const data = await response.json();
return data;
} catch (error) {
console.error('Error fetching data:', error);
throw error; // 重新抛出错误或进行其他错误处理
}
}
4. 串联异步操作
当需要等待一个异步操作完成后再进行另一个异步操作时,async/await
特别有用。
async function processData() {
const rawData = await fetchData();
const processedData = await processRawData(rawData);
return processedData;
}
5. 与 Promise 一起使用
虽然 async/await
是基于 Promise 的,但你也可以在 async
函数中直接使用 Promise 的 .then()
和 .catch()
方法。
async function fetchAndProcessData() {
const dataPromise = fetchData();
const processedData = await dataPromise.then(rawData => processRawData(rawData));
return processedData;
}
注意事项:
- 只能在
async
函数内部使用await
。 await
会暂停当前async
函数的执行,直到 Promise 完成(无论是 fulfilled 还是 rejected)。- 如果不需要等待 Promise 的结果,或者只是想要处理 Promise 完成后的操作,你可以直接使用 Promise 的
.then()
和.catch()
方法,而不必使用async/await
。
总的来说,async/await
使得异步编程更加直观和易于理解,特别是在需要等待多个异步操作依次完成时。