2 回答
TA贡献1877条经验 获得超6个赞
Usingthen是最简单的解决方案,但您可以使用AIIFE:
function test() {
(async () => {
const users = await getUsersFromDB();
console.log(users);
})().catch(console.error);
console.log('The rest of the code here continues to execute');
[...]
// Promise resolves and logs the users value
}
替代方案只能是async do表达式。
TA贡献1784条经验 获得超2个赞
所以你需要的基本上是拆分代码。一件应该以 async/await 语法执行,另一件应该照常执行。
首先我想说的话,如果你这样做如下
async function test() {
console.log('The rest of the code here continues to execute');
const users = await getUsersFromDB();
// Code in here is not executed until promises returns
console.log(users);
}
这样就可以了。这可能看起来有点奇怪,因为我们只是将线路向上移动了一点,这不是我们想要做的,但是......
await关键字停止函数的执行async,但是我们有一些代码在冻结函数时应该继续工作await,这意味着我们不能将代码放在 之后await,只能放在之前。
据我了解,表示为“这里的其余代码继续执行”的代码也可以是异步的,因此生成的示例如下:
async function test() {
console.log('Some synchronous code');
setImmediate(() => {
console.log('Some asynchronous code');
});
const users = await getUsersFromDB();
// Code in here is not executed until promises returns
console.log(users);
}
添加回答
举报