1

这个问题是关于 async/await 提议的。据我了解,以下功能:

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

someAsyncFn() 解决后立即返回。

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

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

退出类似于以下的函数后返回的 Promise 是否立即解析:

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

还是等到内部承诺也像这样解决:

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

2 回答 2

3

async/await让您以同步“风格”编写异步流程。它的工作方式与您期望的同步函数完全一样,只是它返回一个承诺。换句话说,它的行为与您上一个示例一样。它执行所有语句并返回一个解析为undefined.

于 2017-01-06T16:52:23.857 回答
1

我会说,根据规范,异步/等待命令它只包装承诺/进程并期望解析/拒绝调用返回值,如果存在,如果不存在,它将返回未定义并继续下一个承诺/进程等待。所以,它会是这样的:

return promise.then(() => someAsyncFn())
        .then(() => performSomeOtherAsyncAction() )
        .then(() => doOneLastThing() )
于 2017-01-06T16:58:05.543 回答