如何在更新时从Collection文档中获取数据?

问题描述 投票:1回答:1

[我正在尝试从Firebase onUpdate的集合“用户”中查询数据,更新文档“ bulkMsgs”,但每次这样做都会收到“获取用户错误”。

这两种方法都可以单独工作,但是当我将它们结合使用时,就会发生错误。

我在这里想念的是什么?!

var functions = require("firebase-functions");
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

    exports.bulkMsg = functions.firestore
        .document('/bulkMsgs/{bulkMsgsId}').onUpdate((snap, context) => {

            const newValue = snap.after.data();
            const regDate = newValue.regDate;

            admin.firestore().collection('users').get().then(onUser => {
                onUser.forEach(oneUser => {
                    if (oneUser.data().notification === "true") {
                       console.log(oneUser.id);
                    }
                });
                return true;

            }).catch(err => {
                console.log('Error getting user', err);
            });


            return true;
        });

CF日志中错误的[Image

typescript firebase google-cloud-firestore google-cloud-functions
1个回答
0
投票

您正在获得Error: 4 DEADLINE_EXCEEDED。在网上快速进行search显示,当“您发出的请求花费的时间过长”时,似乎会发生这种情况。

但是,关于您在上面的评论中所做的澄清,似乎您处理的不是很多。

如果您返回由get()异步方法返回的promise,将会发生以下情况。

exports.bulkMsg = functions.firestore
    .document('/bulkMsgs/{bulkMsgsId}').onUpdate((snap, context) => {

        const newValue = snap.after.data();
        const regDate = newValue.regDate;

        return admin.firestore().collection('users').get()
        .then(onUser => {
            onUser.forEach(oneUser => {
                if (oneUser.data().notification === "true") {
                   console.log(oneUser.id);
                }
            });
            return null;
        }).catch(err => {
            console.log('Error getting user', err);
            return null;
        });

    });

事实上,您必须在后台触发的Cloud Function中返回Promise或值。我建议您观看Firebase视频系列中有关“ JavaScript Promises”的3个视频:https://firebase.google.com/docs/functions/video-series/,它们解释了这一关键点。

© www.soinside.com 2019 - 2024. All rights reserved.