我在一个集合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
的新手。
答案 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)
})