Как получить данные из документа коллекции на обновление? - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь запросить данные из коллекции «users» в 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.

1 Ответ

1 голос
/ 17 октября 2019

Вы получаете Error: 4 DEADLINE_EXCEEDED. Выполнение быстрого поиска в сети показывает, что это происходит, когда «ваши запросы занимают слишком много времени».

Однако, что касается пояснений, которые вы дали вВ комментариях выше не похоже, что вы имеете дело с большими объемами.

Что произойдет, если вы вернете обещание, возвращенное асинхронным методом get(), следующим образом.

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;
        });

    });

Фактически, вы ДОЛЖНЫ вернуть Обещание или значение в фоновой облачной функции. Я бы посоветовал вам посмотреть 3 видео о «Обещаниях JavaScript» из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/, которые объясняют этот ключевой момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...