我正在尝试从我的 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/