Javascript wait Promise.all不等待异步包装器

Javascript wait Promise.all不等待异步包装器,javascript,async-await,Javascript,Async Await,即使在阅读了类似问题(例如和)的多个答案后,我仍然不理解为什么此代码没有等待承诺,因此在其他检查点之后记录['check2'] 这是一个使用代码的最小示例。在原始代码中,我需要从不同的来源获取一些信息,然后express服务器才能开始侦听 console.log(“检查1”); const resolveintwoses=()=>{ 返回新承诺((解决)=>{ setTimeout(()=>resolve(“check2”),2000); }) }; 异步函数测试(){ 常量异步函数=[ re

即使在阅读了类似问题(例如和)的多个答案后,我仍然不理解为什么此代码没有等待承诺,因此在其他检查点之后记录['check2']

这是一个使用代码的最小示例。在原始代码中,我需要从不同的来源获取一些信息,然后express服务器才能开始侦听

console.log(“检查1”);
const resolveintwoses=()=>{
返回新承诺((解决)=>{
setTimeout(()=>resolve(“check2”),2000);
})
};
异步函数测试(){
常量异步函数=[
resolveInTwoSeconds()
];
const results=wait Promise.all(异步函数);
控制台日志(结果);
}
(异步()=>等待测试())();

控制台日志(“检查3”)这应该是您想要的。您需要
console.log
位于异步函数中

console.log(“检查1”);
const resolveintwoses=()=>{
返回新承诺((解决)=>{
setTimeout(()=>resolve(“check2”),2000);
})
};
异步函数测试(){
常量异步函数=[
resolveInTwoSeconds()
];
const results=wait Promise.all(异步函数);
控制台日志(结果);
}
(异步()=>{
等待测试();
控制台日志(“检查3”);

})();这行代码声明了一个
async
函数并执行它:

(async() => await test())();
到目前为止,没有任何东西等待其结果,执行继续到
console.log(“check3”)

您必须明确地等待它:

await (async () => await test())();
现在,这还不起作用,因为顶级函数不是
async
。无论何时需要调用
wait
,都必须确保它是在
async
函数中调用的。一种方法是将所有内容包装到另一个
async
函数中:

(异步()=>{
控制台日志(“检查1”);
const resolveintwoses=()=>{
返回新承诺((解决)=>{
setTimeout(()=>resolve(“check2”),2000);
})
};
异步函数测试(){
常量异步函数=[
resolveInTwoSeconds()
];
const results=wait Promise.all(异步函数);
控制台日志(结果);
}
等待(异步()=>等待测试())();
控制台日志(“检查3”);

})()
它应该按预期工作,2秒钟后记录check2如果你想最后记录
“check3”
,你应该在最后一个异步生命周期内添加该语句。你能描述一下你发布的更多内容吗?测试你的代码,并根据承诺找到工作。all@EugenSunic“…为什么使用此代码…记录['check2']最后一个在其他检查点之后。”-预期输出:
检查1->检查2->检查3
。实际输出:
check1->check3->check2
async
/
wait
只是承诺和
.then()的语法糖。任何不在
.then()
调用(在
wait
之后的函数调用中)中的内容都不会“等待”。将应该检查的代码3移动到函数中,并在测试后调用它,这是我能想到的唯一解决方案@Robin.Ok,谢谢大家。这意味着如果不点击“check3”(将其移动到包装器函数中或使用回调)就不可能实现。