首页 > 解决方案 > JavaScript 中的异步函数很奇怪

问题描述

$ cat x.js
async function print() {
    console.log("abc");
}

print();
$ nodejs x.js
abc

怎么会这样?!print()返回一个Promise未被等待的对象,是吗?如果没有等待,那为什么要console.log执行呢?

标签: javascriptnode.js

解决方案


是的,就像 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)
    })
}

推荐阅读