说说async、await的设计和实现
时间: 2024-10-09 13:01:27 浏览: 22
`async` 和 `await` 是 JavaScript 中用于处理异步操作的一种现代编程模式,它们通常与 Promise 对象一起使用,让异步代码看起来更像同步代码,提高了代码的可读性和简洁性。
设计原理:
1. **async函数**:`async` 关键字用于声明一个返回Promise的函数。当函数内部有await关键字时,整个函数会被转换为一个Promise,直到所有await表达式完成才会解析结果。
2. **await关键字**:`await` 后面跟一个Promise,表示暂停当前函数的执行,直到Promise状态变为fulfilled(成功)或者rejected(失败)。如果Promise状态变为fulfilled,await会返回Promise的结果;如果Promise被reject,await后面的代码将不再执行,直接抛出错误。
实现细节:
- 当调用一个包含`await`的函数时,它不会立即返回,而是创建一个新的微任务(microtask),等待Promise解析后再继续执行。
- 当`await`后面的是一个成功的Promise,它的值会被传递给`async`函数,并作为该函数的返回值。
- 如果`await`后面的是一个拒绝的Promise,会立即抛出异常,中断`async`函数并停止执行后续代码。
例子:
```javascript
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('Failed to load data');
return await response.json();
} catch (error) {
console.error(error);
}
}
// 使用方式
fetchData().then(data => console.log(data)).catch(err => console.error(err));
```
阅读全文