Пожарная облачная функция бесконечный цикл - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь отправить облачное сообщение пользователям, которые подписаны на тему.Проблема в том, что я теперь получаю бесконечный цикл на updateRecord.Я пытаюсь поймать это внутри здесь if(newData.count == prevData.count) return null;, но это не работает.Я думаю, что происходит то, что я обновляю запись в документе firestore, которая затем снова вызывает функцию update, вызывая цикл.

exports.updateRecord = functions.firestore.document("records/{recordsID}").onUpdate((change, context) => {

    const newData = change.after.data();
    const prevData = change.before.data();
    if(newData.count == prevData.count) return null;
    let newCount = prevData.count + 1;

    const doc = admin.firestore().doc(`/records/{recordsID}`);
    doc.set({ count: newCount })

    // TODO: -  Requires testing
    var topic = "global";

    const payload = {
        data: {
            count: `${newCount}`,
            firebaseId: `${newData.firebaseId}`,
            type: "updateRecord",
        }  
    };

    return admin.messaging().sendToTopic(topic, payload)
    .then((response) => {
        console.log('Message sent successfully');
    })
    .catch((error) => {
        console.log('Error sending message:', error);
    });

});

1 Ответ

1 голос
/ 04 июля 2019

Строка if(newData.count == prevData.count) return null; не работает, потому что ваш код всегда обновляет документ с увеличенным счетом каждый каждый раз, когда вызывается функция.

Из вашего вопроса непонятно, что должен делать счет в этой записи или почему вам вообще нужно обновлять документ. Вы также игнорируете обещание от обновления, что является еще одной проблемой. Возможно, вы захотите продумать проблему, которую вы пытаетесь решить, и тщательно объяснить, почему вы делаете то, что делаете в этом коде.

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