javascript - JavaScript 中的异步函数很奇怪
问题描述
$ cat x.js
async function print() {
console.log("abc");
}
print();
$ nodejs x.js
abc
怎么会这样?!print()
返回一个Promise
未被等待的对象,是吗?如果没有等待,那为什么要console.log
执行呢?
解决方案
是的,就像 choz 说的那样,异步函数返回一个承诺,即使你没有在你的代码中定义一个承诺。
我认为在 await 语句中的所有承诺都得到解决后,这个返回的承诺就会实现。
我在下面的代码中对其进行了测试,它还返回了 Promise,它只有在所有 Promise 都解决后才会实现(在这种情况下是 3000 毫秒后):
async function print2() {
await console.log("abc")
await new Promise((res, rej) => {
setTimeout(() => {res(33)},3000)
})
await new Promise((res, rej) => {
setTimeout(() => {res(33)},50)
})
}
推荐阅读
- spring-integration - Spring集成文件编写示例
- java - Hibernate 5.2.17 不回滚失败的事务
- sql - SQL查询以查找不同行之间的文本差异
- angular - 错误:找不到“AppModule”的 NgModule 元数据。在另一台机器上
- amazon-web-services - 使用 SSL CloudFront 的多个域
- r - 在行上分配货币数量,直到它耗尽
- python-3.x - 负值:使用主题连贯性评估 Gensim LDA
- laravel - 无法与主机 smtp.gmail.com 建立连接 - Laravel 5.2
- jquery - 对象的动态分组
- javascript - 如何在 img 点击,只显示一个,并隐藏其他 div