我想在函数解析后使用 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');
我想念什么以及如何解决这个问题?
如何解决speak
updateGuider
?
更新:感谢@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)
}