javascript - 谷歌 firebase 云功能 + firestore

标签 javascript firebase google-cloud-firestore google-cloud-functions

我正在尝试从我的 firebase 云函数中的 firebase firestore 获取数据,我的 index.js 如下所示:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.writeReport = functions.https.onRequest((request, response) => {
    var fetchedData;

    db.collection("mycollection").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            fetchedData = doc.id;
            console.log("data" + `${doc.id} => ${doc.data()}`);
        });
    });
    response.send("data " + fetchedData);
});

这段代码给出了“data undefined”的输出,所以我猜这意味着 foreach 语句没有被执行。 我是谷歌云的新手,所以我一直在浏览文档,但找不到与我的问题相关的任何内容。 提前致谢, 盖伊。

最佳答案

db.collection("mycollection").get() 是异步的,立即返回。 then 回调函数将在稍后查询完成后执行。 then() 也是异步的。事实上,任何返回 promise 的东西都是异步的。

这意味着您对 response.send() 的调用在查询完成之前执行。该函数在发送响应后立即终止,因此查询永远不会完成。在发送响应之前,您需要等待查询完成。最简单的方法就是从回调内部调用 response.send

db.collection("mycollection").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        fetchedData = doc.id;
        console.log("data" + `${doc.id} => ${doc.data()}`);
    });
    response.send("data " + fetchedData);
});

如果您是 JavaScript 的新手,我强烈建议您花时间学习 promise 的工作原理。有一个 video series关于学习如何在 Cloud Functions 中使用 promises,您可能会觉得有帮助。

关于javascript - 谷歌 firebase 云功能 + firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938423/

相关文章:

ios - 从 Fabric 链接到 Firebase 后,Firebase 控制台中未显示崩溃

javascript - 将数组渲染为组件

ios - 如何在 iOS swift 中自动登录用户?

javascript - 使用焦点事件显示另一个元素

javascript - 如何在智能表格中按较小的数字到较大的数字排序?

firebase - Firestore 操作超时

database - 我可以使用 where equals 子句和 orderby 查询 Cloud Firestore 集合吗?

javascript - 如何用 sinon 模拟 hapi.js 回复以进行单元测试

javascript - AngularJS:如何获取 $http 结果作为函数的返回值?

ios - 如何使用 Firebase SDK 作为 Pod 依赖项?