Делая change.after.ref.child('last_index_timestamp').set()
, вы пишете ссылку, которую слушаете в своей облачной функции. Таким образом, облачная функция запускается автоматически.
Вы должны проверить в начале функции, нужно ли ее выполнять или нет.
Скорее всего, вы бы проверили, существует ли last_index_timestamp
или имеет конкретное значение, используя change.before.val()
и / или change.after.val()
.
Если вы хотите остановить выполнение функции, просто верните null
.
См. Следующий официальный образец для примера этой "методики" (строки с 30 по 32) https://github.com/firebase/functions-samples/blob/952fe5d08c0a416f78def93fa337ca2bd73aedcf/message-translation/functions/index.js
Последнее (важное) замечание: вы должны вернуть обещание, возвращенное методом set()
, а также отловить возможные ошибки следующим образом:
return index.saveObject(after_data)
.then(
() => return change.after.ref.child('last_index_timestamp').set(Date.parse(context.timestamp))
)
.catch(err => {
console.log('Error:', err);
return false;
});
Я бы посоветовал вам посмотреть следующую официальную серию видео "Изучение функций облака для Firebase" (см. https://firebase.google.com/docs/functions/video-series/), и, в частности, три видео под названием "Изучите обещания JavaScript", в которых объясняется, как и почему мы должны объединить и возвращать обещания в вызванных событиями облачных функциях.