Извлечение документов из Firestore с помощью NodeJs Promise - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть идентификаторы документов в коллекции, скажем idsCollection. У меня есть другая коллекция, где на самом деле хранятся документы, скажем 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);
              });
        })
}

Отказ от ответственности: я новичок в NodeJs и Promise.

1 Ответ

0 голосов
/ 18 апреля 2019

Создание нового обещания не требуется..get() вернет обещание.У firestore также есть getAll, которым вы можете воспользоваться, проверьте этот пост .

Как пример

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