详细说说js的await和async
时间: 2023-05-28 15:07:21 浏览: 61
`async/await` 是 ECMAScript 2017 中的新特性,它是异步编程的一种解决方案。`async/await` 在语法上是基于 Promise 实现的,它可以让我们用同步的方式编写异步代码,避免了回调地狱。`async/await` 的主要特点是:
- `async` 函数返回一个 Promise 对象,可以使用 `then` 方法进行链式调用;
- `await` 只能在 `async` 函数内部使用,它可以暂停当前的异步函数的执行,等待 Promise 对象的状态改变后再继续执行。
下面是一个使用 `async/await` 的例子:
```javascript
function getUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`get user ${id}`);
resolve(`user ${id}`);
}, 1000);
});
}
async function main() {
console.log('start');
const user1 = await getUser(1);
const user2 = await getUser(2);
console.log(user1, user2);
}
main();
```
上面的代码中,我们定义了一个 `getUser` 函数,它返回一个 Promise 对象。然后我们定义了一个 `main` 函数,它使用了 `async` 关键字,表示这是一个异步函数。在 `main` 函数中,使用了 `await` 关键字来暂停当前函数的执行,等待 `getUser` 函数返回的 Promise 对象的状态改变。当 `getUser` 函数的 Promise 对象状态改变后,`await` 关键字会将结果返回,并让 `main` 函数继续执行。
总结:
`async/await` 是一种基于 Promise 的异步编程解决方案,它可以让我们用同步的方式编写异步代码,避免了回调地狱。`async` 函数返回一个 Promise 对象,可以使用 `then` 方法进行链式调用;`await` 只能在 `async` 函数内部使用,它可以暂停当前的异步函数的执行,等待 Promise 对象的状态改变后再继续执行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)