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() )
此问题与 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() )