我的index.js文件:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();
admin.initializeApp();
const db = admin.firestore();
exports.getName = functions.https.onCall((data, context) => {
var docRef = db.collection("dogs").doc("{data.id}");
var getDoc = docRef.get().then(doc => {
return doc.get("name");
})
});
颤振项目中的代码:
HttpsCallable callable = FirebaseFunctions.instance.httpsCallable("getName");
var temp = await callable({"id": "11"});
print(temp.data);
程序输出null,尽管集合中的文档"dogs“中有一个字段名为"11”的id。我正试图从消防局获取特定数据并将其返回。
控制台不显示任何错误,如果我返回其他任何内容,它将正常打印出来。
除了使用触发器(如: onWrite )之外,找不到任何关于从防火墙获取数据到云功能的文档。
发布于 2021-02-02 15:59:59
您尝试过使云功能异步吗?
exports.getName = functions.https.onCall(async (data, context) => {
var doc = await db.collection("dogs").doc("{data.id}").get();
return doc.data().name;
});
发布于 2021-02-02 16:38:23
Andi2.2 s的答案是正确的,但是让我解释一下为什么它不适用于使用then()
的初始代码。
通过这样做:
exports.getName = functions.https.onCall((data, context) => {
var docRef = db.collection("dogs").doc("{data.id}");
var getDoc = docRef.get().then(doc => {
return doc.get("name");
})
});
实际上,您不会在可调用的云函数中返回doc.get("name");
。then()
方法确实返回Promise.resolve(doc.get("name"))
,就像在文档中解释的那样,但是不返回承诺链。
下列措施将起作用:
exports.getName = functions.https.onCall((data, context) => {
var docRef = db.collection("dogs").doc("{data.id}");
return docRef.get().then(doc => {
return doc.get("name");
})
});
顺便问一下,你确定db.collection("dogs").doc("{data.id}");
是对的吗?不是应该是db.collection("dogs").doc(data.id);
吗
https://stackoverflow.com/questions/66013087
复制相似问题