如何链接异步和非异步函数
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()
完成。
我有一个同步函数调用另一个包含异步调用的同步函数。如下图:
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()
完成。