【发布时间】:2021-02-06 16:18:04
【问题描述】:
我在 firebase 函数中有以下代码...
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.getCollections = functions.https.onCall(async (data, context) => {
const path = admin.firestore().collection('BusinessName').doc('employee');
const collections = await path.listCollections();
collections.forEach(collection => {
console.log('Found subcollection with id:', collection.id);
});
return({ collections: collections })
});
还有前端代码……
let buttonClick = () => {
let getCollections = firebase.functions().httpsCallable('getCollections');
getCollections().then((res) => {
console.log(res);
})
}
此路径中有两个子集合。此函数应返回一个数组,其中包含上图中的两个测试集合。但是,它只返回一个空数组。
在函数日志中...
我已经厌倦了具有不同数据库结构的不同路径,但返回始终是一个空数组。 node.js 函数一定有问题,但它来自 firebase 的文档。你怎么看……?
【问题讨论】:
-
仅供参考,我刚刚尝试了您的代码,但确实得到了一个包含两个元素的数组。如果没有更多信息,很难知道您的问题是什么...
-
如果您将代码直接放在脚本标签中(即不通过按钮单击)会发生什么?另外,如果你这样做
console.log(JSON.stringify(res)); console.log(res.data.collections.length);会发生什么? -
@RenaudTarnec 在您的第二条评论中,鉴于 Cloud Function 的日志输出,问题似乎出在其中,而不是在调用函数的方式或处理结果的方式上。 @DoubleTri:这意味着您还应该能够在本地 Node.js 脚本上重现此问题,这可能值得一试,因为它减少了可能导致问题的因素。
-
JSON.stringify(res)=== {"data":{"collections":[]}}。res.data.collections.length=== 0 -
附加数据:上述情况发生在功能模拟器上。我刚刚在 firebase 函数的实时版本中尝试了相同的代码,它按预期运行。
标签: node.js firebase google-cloud-firestore