我正在尝试以下函数来计算我的集合中的文档总数:https://stackoverflow.com/a/49407570/8312532但我看到firebase函数已更新:https://firebase.google.com/docs/functions/beta-v1-diff#cloud-firestore
因此我正在尝试这个:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.documentWriteListener =
functions.firestore.document('domiciliarios/{uid}')
.onWrite((change, context) => {
if (!change.before) {
// New document Created : add one to count
db.doc(docRef).get().then(snap => {
db.doc(docRef).update({numberOfDocs: snap.numberOfDocs + 1});
return;
});
} else if (change.before && change.after) {
// Updating existing document : Do nothing
return;
} else if (!change.after) {
// Deleting document : subtract one from count
db.doc(docRef).get().then(snap => {
db.doc(docRef).update({numberOfDocs: snap.numberOfDocs - 1});
return;
});
}
});
但是当我在Firestore中添加新文档时,我收到以下错误:
Function returned undefined, expected Promise or value
有什么想法吗?
答案 0 :(得分:1)
Firestore触发器应返回在所有异步工作完成时解析的promise,如果没有工作则返回null。您的三个案例中的每一个都需要具有适当的返回值。
if (!change.before) {
// New document Created : add one to count
return db.doc(docRef).get().then(snap => {
return db.doc(docRef).update({numberOfDocs: snap.numberOfDocs + 1});
});
} else if (change.before && change.after) {
// Updating existing document : Do nothing
return null;
} else if (!change.after) {
// Deleting document : subtract one from count
return db.doc(docRef).get().then(snap => {
return db.doc(docRef).update({numberOfDocs: snap.numberOfDocs - 1});
});
}
如果您打算花时间使用云功能,那么您一定要了解承诺的工作原理。从这里开始有一个由三部分组成的视频教程:https://www.youtube.com/watch?v=7IkUgCLr5oA&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=1