使用NodeJs Promise从Firestore提取文档

时间:2019-04-17 18:54:53

标签: node.js promise google-cloud-firestore

我在一个集合idsCollection中有文档ID。我还有另一个集合,其中实际上存储了文件path-to-documents/docId。我想要一个说results的数组来返回所有文档。我正在尝试实现以下目标:

function getAllDocuments(database: any) {
  return new Promise((resolve, reject) => {
          const idsCollection = "path/idsCollection"
          const docPath = "path-to-documents/documents"
          const dataSource = database
          const dataRef = dataSource.collection(idsCollection);

          const results = {};
          dataRef.get()
              .then(snapshot => {
                  snapshot.forEach(doc => {
                      let id = doc.data().docId
                      console.log("docId: " + id)

                      dataSource.doc(docPath+id).get()
                      .then(d => {
                        results[d.id] = d.data()
                      })
                  })

                  //return results[documentId]: {document}
                  if (Object.keys(results).length > 0) {
                      resolve(results);
                  } else {
                      resolve('No such document');
                  }
              }).catch(err => {
                  reject(false);
                  console.log('Error getting documents', err);
              });
        })
}

免责声明:我是NodeJ和Promise的新手。

1 个答案:

答案 0 :(得分:0)

没有必要创建新的承诺。 .get()将返回一个承诺。 firestore还有一个getAll可以利用,请勾选this post

例如

return dataRef.get().then(snapshot => {
  docRefs = []
  snapshot.forEach(doc => {
    docRefs.push(firestore.collection(docPath).doc(doc.data().docId)
  })
  return dataSource.getAll(...docRefs)
})