JavaScript 异步函数,在没有 return 值的情况下 returned promise 何时解析

JavaScript async function, when is returned promise resolved in the case of no return value

此问题与 async/await 提案有关。据我了解,以下功能:

async function foo() {
   return await someAsyncFn();
   await performSomeOtherAsyncAction();
   doOneLastThing();
}

returns 一旦 someAsyncFn() 解决。

但是,如果没有return值怎么办:

async function() {
       await someAsyncFn();
       await performSomeOtherAsyncAction();
       doOneLastThing();
}

returned promise 是否在退出函数后立即解析,类似于:

function foo() {
    someAsyncFn()
        .then(() => {
            return performSomeOtherAsyncAction();
        })
        .then(() => {
            doOneLastThing();
        });
}

还是像这样等到内在的承诺已经解决:

function foo() {
    return someAsyncFn()
        .then(() => {
            return performSomeOtherAsyncAction();
        })
        .then(() => {
            doOneLastThing();
        });
}

async/await 允许您在同步 "style" 中编写异步进程。它的工作方式与您期望的同步函数完全一样,只是它 returns 是一个承诺。换句话说,它的行为与上一个示例中的一样。它执行所有语句和 returns 解析为 undefined.

的承诺

我会说,根据规范 Async/await 命令,它仅包装 promise/process 并期望 resolve/reject 调用 return 值(如果存在) ,如果不是它将 return undefined 并继续等待下一个 promise/process。所以,它会是这样的:

return promise.then(() => someAsyncFn())
        .then(() => performSomeOtherAsyncAction() )
        .then(() => doOneLastThing() )