解决承诺未按预期工作



我想在函数解析后使用 async/await 来运行console.log('Procccess Ends');updateGuider

类似于下面的代码:

tutor();
async function tutor(){
console.log('tutor function initiated..');
// wait until updateGuider function resolves
await updateGuider('default');
// The expected result is to reach this line after updateGuider resolves, but we can't so far!
console.log('Procccess Ends');
}
function updateGuider(state){    
return new Promise((resolve) => { 
if(state == 'done'){
console.log('updateGuider has been resolved!');
resolve();    
}
switch(state) {
case 'default':
speak();
break;         
}

});  
}
async function speak(){

setTimeout(function(){
//after 5 seconds we resolve the updateGuider from speak function
updateGuider('done')      
},5000)

}

但即使我们解决了updateGuider它也不会运行console.log('Procccess Ends');

我想念什么以及如何解决这个问题?

如何解决speakupdateGuider

更新:感谢@h2ooooooo这段代码有效,但我不明白它是如何工作的,如果它是一个很好的解决方案以及它是如何工作的,你能帮我一把吗!

tutor();
async function tutor(){
console.log('tutor function initiated..');
// wait until updateGuider function resolves
await updateGuider('default');
// The expected result is to reach this line after updateGuider resolves, but we can't so far!
console.log('Procccess Ends');
}
function updateGuider(state){    
return new Promise((resolve) => { 
switch(state) {
case 'default':
speak(resolve);
break;         
}

});  
}
async function speak(resolve){

setTimeout(function(){
//after 5 seconds we resolve the updateGuider from speak function
console.log('entered speak')
resolve();      
},5000)

}

每次调用 updateGuider 时都会返回不同的承诺。严格来说,您无法像这样解决更新程序指南。此外,除非您在异步函数中等待某些内容,否则它什么都不做,因此 speak 目前没有理由异步。这并不完美,但你明白了问题的要点。


function updateGuider(state){    
return new Promise((resolve) => { 
if(state == 'done'){
console.log('updateGuider has been resolved!');
resolve();    
}
switch(state) {
case 'default':
speak(resolve);
break;         
}
});  
}
function speak(resolve){
setTimeout(function(){
//after 5 seconds we resolve the updateGuider from speak function
resolve()    
},5000)
} 

最新更新