async await详解
时间: 2023-09-14 10:13:03 浏览: 93
好的,下面我会更详细地介绍 async/await 的用法和工作原理。
## async 函数
async 函数是一个返回 Promise 对象的异步函数。使用 async 关键字声明的函数会自动将函数体包装成一个 Promise 对象,并且在函数内部使用 await 关键字来等待异步操作的结果。
下面是一个简单的例子:
```
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
```
在这个例子中,fetchData 函数是一个异步函数,它使用了 await 关键字来等待 fetch 和 response.json 方法返回的 Promise 对象。这样,我们就可以通过返回 data 变量来获取异步操作的结果。
## await 表达式
await 表达式只能在异步函数内部使用。它会暂停异步函数的执行,直到等待的 Promise 对象的状态发生改变。如果 Promise 对象被解决,await 表达式会返回 Promise 对象的解决值。如果 Promise 对象被拒绝,await 表达式会抛出一个错误。
下面是一个示例:
```
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
fetchData().then(data => {
console.log(data);
}).catch(error => {
console.error(error);
});
```
在这个例子中,fetchData 函数使用了 await 关键字来等待 fetch 和 response.json 方法返回的 Promise 对象。如果 Promise 对象被解决,fetchData 函数会返回 data 变量。否则,fetchData 函数会抛出一个错误,可以通过 .catch 方法来捕获这个错误。
## 错误处理
在 async 函数中,如果 Promise 对象被拒绝,可以使用 try/catch 语句来捕获错误。
下面是一个示例:
```
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
throw new Error('数据获取失败');
}
}
fetchData().then(data => {
console.log(data);
}).catch(error => {
console.error(error);
});
```
在这个例子中,如果 Promise 对象被拒绝,fetchData 函数会抛出一个错误,可以在 .catch 方法中捕获这个错误。如果使用了 throw 关键字,那么 .catch 方法也可以捕获这个错误。
## 并发执行多个异步操作
在 async 函数中,可以使用 Promise.all 方法来并发执行多个异步操作。
下面是一个示例:
```
async function fetchData() {
const [data1, data2] = await Promise.all([
fetch('https://api.example.com/data1').then(response => response.json()),
fetch('https://api.example.com/data2').then(response => response.json())
]);
return [data1, data2];
}
fetchData().then(([data1, data2]) => {
console.log(data1, data2);
}).catch(error => {
console.error(error);
});
```
在这个例子中,使用 Promise.all 方法来并发执行两个异步操作。fetch 方法返回 Promise 对象,然后使用 .then 方法来处理 Promise 对象的解决值。最后,返回一个包含两个数据的数组。
希望这些详细的解释对你有所帮助。如果你还有其他问题或者需要更多的解释,请随时问我。
阅读全文