【发布时间】:2022-01-02 06:44:29
【问题描述】:
我有两个函数:doAsyncStuff 和 doNextStep。 如何确保 doNextStep 仅在 doAsyncStuff 完成后执行?
我尝试了类似的方法,但没有帮助:doAsyncStuff().then(_ => doNextStep());
async function doAsyncStuff() {
if (vscode.workspace.workspaceFolders) {
vscode.workspace.workspaceFolders.forEach(async (e) => {
for (const [name, type] of await vscode.workspace.fs.readDirectory(e.uri)) {
console.log(name);
}
});
}
return true;
}
function doNextStep() {
console.log('next step');
}
【问题讨论】:
-
你在哪里执行
doNextStep? -
您应该使用实际的
foreach而不是函数。回调调用者不等待回调函数。 -
在这里使用
forEach将不允许在该函数返回之前解决promise。您应该将其替换为map,并将结果包装在Promise.all中,您可以使用await确保在执行下一步之前所有这些都完成。 -
await Promise.all(vscode.workspace.workspaceFolders.map(async ... await)) 可以解决问题。