【问题标题】:How to refactor firebase query to a specific thenable function如何将firebase查询重构为特定的thenable函数
【发布时间】:2020-08-04 22:18:18
【问题描述】:

我有一个函数可以返回 firebase firestore 查询的快照。如下:

export async function getClientWorkflowsFromFirebase(clientID) {

    const snapshot = await firebase.firestore().collection("workflows").where("client_id", "==", clientID).get();
    return snapshot


}

要运行上面的代码并得到我想要的结果,我这样做:

  getClientWorkflowsFromFirebase("some-client-id").then((x)=>{
      x.forEach(doc => {
          console.log(doc.data());
      });
  });

它工作正常,但它不是我想要的 API。我想获得相同的结果,而最终用户不必记住doc.data()

相反,我希望 thenable 函数为用户提供如下数据:

getClientWorkflowsFromFirebase("some-client-id").then((arr)=>{
      arr.forEach(val => {
          // data is then available in val, not val.data()
      });
  });

如何重写函数以提供最终结果?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore async-await es6-promise


    【解决方案1】:

    在 QuerySnapshot 的 docs 数组上使用 map() 将文档快照数组转换为 JavaScript 对象数组。

    export async function getClientWorkflowsFromFirebase(clientID) {
        const snapshot = await firebase.firestore().collection("workflows").where("client_id", "==", clientID).get();
        return snapshot.docs.map(doc => doc.data())
    }
    

    一定要学会使用Array.map()——它应该在每个 JavaScript 程序员的工具箱中。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多