簡體   English   中英

解決未按預期工作的承諾

[英]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');

我想念什么以及如何解決這個問題?

我怎樣才能解決updateGuiderspeak

更新:感謝@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM