Только проверка того, изменилось ли определенное свойство документа в облачных функциях - PullRequest
0 голосов
/ 18 июня 2020

Я хочу иметь возможность выполнять оператор if только при изменении свойства done (bool) в документе задачи и не беспокоиться об остальной части документа.

Что касается текущей проблемы, то при изменении имени задачи эта функция вызывается, даже если свойство done не изменилось.

exports.watchTodos = functions.firestore.document('users/{uid}/todos/{docId}')
    .onUpdate((snap, context) => {

        const data = snap.after.data();
        const isDone = data.done;           

        if (isDone === true) {
              console.log('add points')
        }

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Невозможно запустить облачную функцию только при изменении c в документе, поэтому вам придется обнаружить это в своей реализации функции.

Чтобы определить, есть ли done поле изменилось, вы можете сравнить его значения before и after примерно так:

if (snap.before.data().isDone != snap.after.data().isDone) {
  ...
}
0 голосов
/ 18 июня 2020

Из вашего вопроса кажется, что вы хотите запустить облачную функцию, когда isDone установлен на true.

Следовательно, другой возможностью было бы создать документ в специальной c дополнительной коллекции, когда вы устанавливаете значение isDone на true в своем todo do c.

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

В вашем интерфейсе вы должны использовать пакетную запись для одновременной записи в две коллекции (вложенная коллекция todos и «выделенная» коллекция). Вы можете назначить документу, созданному в «выделенной» коллекции, тот же идентификатор, что и пользователю или документу todo. Таким образом, в облачной функции onCreate вы знаете, какой пользователь или задача do c инициировал создание do c (и выполнение CF).

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