Javascript 如何使用云函数返回firestore中的每个集合及其文档?
希望返回一个具有[1年、1月等]的数组,其中每个数组都包含每个文档 目前,这返回一个空数组,但当我打印快照的大小时,我得到了正确的值。不确定我是否正确使用了push(),或者这是一个异步问题。谢谢Javascript 如何使用云函数返回firestore中的每个集合及其文档?,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,希望返回一个具有[1年、1月等]的数组,其中每个数组都包含每个文档 目前,这返回一个空数组,但当我打印快照的大小时,我得到了正确的值。不确定我是否正确使用了push(),或者这是一个异步问题。谢谢 由于异步调用的性质,在填充数组之前返回 您可以尝试我的示例,我的firebase函数定义为async,这允许我使用wait,此语句允许通过等待承诺为您的firestore操作添加一种同步 const functions = require('firebase-functions'); const a
由于异步调用的性质,在填充数组之前返回 您可以尝试我的示例,我的firebase函数定义为
async
,这允许我使用wait
,此语句允许通过等待承诺为您的firestore操作添加一种同步
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.eaxmple = functions.https.onRequest(async (req, res) => {
var datax = []
var collections = await db.collection('collection').doc('docid').listCollections()
for (collection in collections) {
content = await collections[collection].get().then(querySnapshot => {
console.log('number of documents: ' + querySnapshot.size);
return querySnapshot.docs.map(doc => doc.data());
});
datax.push(content)
}
return res.json({datax});
});
你没有正确地履行承诺。在发送最终回复之前,您必须等到所有承诺都得到解决。您正在发送一个空数组,因为响应是在数组填充之前发送的。如果您添加更多控制台日志以查看事件发生的顺序,您将看到这一点。@DougStevenson所有承诺都在哪里?我使用final.then()等待它们,然后发送最终响应。感谢
然后
立即带着承诺返回。它实际上并不阻止代码。如果您添加更多的调试日志,您将更好地了解正在发生的事情。你必须更详细地了解承诺是如何起作用的。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.eaxmple = functions.https.onRequest(async (req, res) => {
var datax = []
var collections = await db.collection('collection').doc('docid').listCollections()
for (collection in collections) {
content = await collections[collection].get().then(querySnapshot => {
console.log('number of documents: ' + querySnapshot.size);
return querySnapshot.docs.map(doc => doc.data());
});
datax.push(content)
}
return res.json({datax});
});