Javascript - 如何从函数返回值,该函数内部使用 .then() 语句

问题描述 投票:0回答:1

因此,在我的代码中,我有一个数学方程,该方程依赖于对 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 值?

javascript firebase asynchronous async-await
1个回答
0
投票

主要问题是您试图从异步操作返回一个值,就好像它是同步的一样。相反,您应该从 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中获取计算结果。

© www.soinside.com 2019 - 2024. All rights reserved.