google firebase cloud functions + firestore



我正在尝试从Firebase Cloud函数中的Firebase Firestore获取数据,我的索引.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);
});

这段代码给了我一个"数据未定义"的输出,所以我想这意味着 foreach 语句不会被执行。 我是谷歌云的新手,所以我一直在浏览文档,我无法确定与我的问题相关的任何内容。 提前感谢, 家伙。

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

这意味着对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 的新手,我强烈建议你花时间学习承诺是如何工作的。 有一个关于学习如何在云函数中使用承诺的视频系列,你可能会觉得很有帮助。

最新更新