async 和await的设计和实现
时间: 2024-10-14 17:00:29 浏览: 30
`async`和`await`是JavaScript中的异步编程特性,它们主要设计用于处理回调地狱的问题,使得异步代码看起来更像同步代码,更易于理解和维护。
**设计原理:**
- `async`关键字用于声明一个函数为异步函数,它会返回一个Promise对象。这意味着函数内部可以包含一个或多个使用`await`的关键字等待的异步操作。
- `await`关键字用于暂停当前异步函数的执行,直到其对应的Promise解析(resolve)或拒绝(reject)。当Promise状态变为fulfilled(成功),`await`后面的表达式结果会被赋值给当前`async`函数中的变量;如果Promise状态为rejected,则会抛出异常。
**实现机制:**
- 当一个异步函数包含`await`语句时,它的执行会在遇到`await`的地方暂停,直到Promise被解决。这时,控制权会交还给Event Loop(事件循环),而不会阻塞主线程。
- 如果Promise成功,`await`后面的结果就是Promise的返回值;如果Promise失败,程序会立即跳转到错误处理部分,通常是在`try...catch`块中捕获并处理异常。
**使用示例:**
```javascript
async function getData() {
try {
const response = await fetch('https://api.example.com/data');
if (response.ok) {
const data = await response.json();
// 使用数据...
} else {
throw new Error('Failed to fetch data');
}
} catch (error) {
console.error(error);
}
}
getData(); // 异步执行,代码不会阻塞
```
阅读全文