如何链接异步和非异步函数

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()应该return一个承诺,await会等到charlie()完成。