因此,在我的代码中,我有一个数学方程,该方程依赖于对 Firebase 的异步调用。因此,当我取回值时,我会计算 then 语句中的分数,但我无法获取其中的函数来返回计算值。例如,如果我有类似的东西:
function parentFunction(){
let result = childFuntion()
}
function childFunction(){
let query = new Promise((resolve, reject) => {
let query = asyncFirebaseCall()
resolve(query)
}
Promise.all([listofQueries])
.then((res) => {
let result = _doMathStuff(listofQueries)
//I know this is not correct but im putting the return here
return result
}
}
如何获取父函数内的 result 值?
主要问题是您试图从异步操作返回一个值,就好像它是同步的一样。相反,您应该从 childFunction 返回一个 Promise 并在 ParentFunction 中处理它。
我建议的代码:
function parentFunction(){
childFunction()
.then(result => {
console.log(result);
// now you have the result inside the parentFunction
// do whatever you want with it
})
.catch(error => {
console.error("Error fetching data:", error);
});
}
function childFunction(){
// if asyncFirebaseCall() itself returns a promise
return new Promise((resolve, reject) => {
let query = asyncFirebaseCall();
// if there are multiple queries, push them all into an array and then use Promise.all
Promise.all([query])
.then(responses => {
let result = _doMathStuff(responses);
resolve(result);
})
.catch(error => {
reject(error);
});
});
}
几点:
asyncFirebaseCall() 应该返回一个承诺。
即使有一个用于演示目的的承诺,我也使用了 Promise.all() 。如果您有多个 Promise,您可以将它们添加到数组中。
childFunction 内的 Promise 通过 _doMathStuff 函数的结果来解析。
在parentFunction中,您调用childFunction并处理其返回的promise。
通过这样做,您可以正确处理操作的异步性质,并且可以在准备好时在parentFunction中获取计算结果。