[英]Resolving a promise not working as expected
我想使用 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');
我想念什么以及如何解決這個問題?
我怎樣才能解決updateGuider
從speak
?
更新:感謝@h2oooooooo這段代碼有效,但我不明白它是如何工作的,如果這是一個好的解決方案以及它是如何工作的,請幫我一把!
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 時都會返回不同的承諾。 嚴格來說,你不能像這樣解析 updaterGuide。 此外,除非您在 async 函數中等待某些東西,否則它什么都不做,所以目前沒有理由是異步的。 這並不完美,但您已了解問題的要點。
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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.