Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用云函数返回firestore中的每个集合及其文档?_Javascript_Node.js_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如何使用云函数返回firestore中的每个集合及其文档?

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

希望返回一个具有[1年、1月等]的数组,其中每个数组都包含每个文档

目前,这返回一个空数组,但当我打印快照的大小时,我得到了正确的值。不确定我是否正确使用了push(),或者这是一个异步问题。谢谢


由于异步调用的性质,在填充数组之前返回

您可以尝试我的示例,我的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});


});