簡體   English   中英

如何鏈接異步和非異步函數

[英]How to chain async and non-async functions

我有一個同步函數,它調用另一個包含異步調用的同步函數。 如下所示:


func alpha(){
   beta(); //sync
   charlie(); //sync but contains an async call
   delta(); // want this to only run after charlie() is done.
}

func charlie(){
   // do some stuff

   //Make async call
   firebase.database.ref.once().then( () =>{
       // Do some async stuff
       // Only after this stuff is done do I want Charlie() to run
   });  

}

更改 Alpha() 以便查理只在 Beta 之后運行的最佳方法是什么?

我想這樣做:


async func alpha(){
   beta(); //sync
   await charlie()
   delta();
}

func charlie(){
   return new Promise( (resolve,reject) => {
   // do some stuff

   //Make async call
   firebase.database.ref.once().then( () =>{
       // Do some async stuff
       setReactHook1(my_data); //react hook state update
       // Only after this stuff is done do I want Charlie() to run
       resolve();
   });  
 });
}

func delta(){
  if(some condition that only applies somtimes){
     setReactHook1(new_data); //overwrite the data that Charlie stored.
   }
}

就其價值而言,我正在使用 React,並且charlie()進行useState更新,我想確保delta()僅在useState完成后運行,我認為您無法用 Hooks 保證這一點。

async func alpha(){
   beta(); //sync
   await charlie(); //sync but contains an async call
   delta(); // now this will only run after charlie() is done
}
func charlie(){
   // do some stuff

   //Make async call and return promise 
   return firebase.database.ref.once()

 }

charlie()應該返回一個 promise, await會等到charlie()完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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