[英]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.