首页 > 解决方案 > 如何在 JS 中过滤 firebase 文档中的数据并在 Promise 中获取 PromiseResult

问题描述

得到承诺

我如何PromiseResult进入JS

这是我尝试过的代码:

  total_amount = db.collection("users").get().then((querySnapshot) => {
    const sum = querySnapshot.docs.reduce((a, b) => a + b.data().amount, 0)
    return sum
  });
  
  console.log(total_amount);


在此处输入图像描述

如何在 Firestore 中过滤集合中的数据

If the first letter is "+" then I want to get filtered in Income section if the first letter is "-" then I want to get filtered in Expenditure Section

我试过这个,但不工作:

    const total_sum = querySnapshot.docs.reduce((a, b) => a + b.data().amount, 0)
    const income_sum = querySnapshot.docs.filter((item) => item > 0).reduce((a, b) => a + b.data().amount, 0)
    const expenditure_sum = querySnapshot.docs.filter((item) => item < 0).reduce((a, b) => a + b.data().amount, 0) * -1;
    return total_sum, income_sum, expenditure_sum
  });
  
  console.log(total_amount);

我得到的输出为undefined

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


所以,有几件事。您似乎正在调用一个返回承诺的函数,并且在等待它完成之前,您将其记录下来。

您可以将 a 包装Promise.All()到它上面,但这需要父函数,async这可能并不理想。

因此,我们将函数声明为 aconst并将其定义为异步函数您可以修改它以适应您的代码,但在不知道完整的父块的情况下,我只能做出一些假设。

const getUsers = async()=>{
total_amount = await db.collection("users").get().then((querySnapshot) => {
    const sum = querySnapshot.docs.reduce((a, b) => a + b.data().amount, 0)
    return sum
  });
  console.log(total_amount);
}

getusers();

推荐阅读