计算集合firestore函数中的文档

时间:2018-05-05 20:44:14

标签: javascript firebase google-cloud-firestore google-cloud-functions

我正在尝试以下函数来计算我的集合中的文档总数: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

有什么想法吗?

1 个答案:

答案 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