Облачные функции - предотвращение триггеров на определенных полях - PullRequest
0 голосов
/ 10 апреля 2020

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

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

Я планирую обновить для этого документа другие поля, кроме uid и статуса, и я не хочу, чтобы триггер снова запускался и отправлял уведомление пользователю, если он не нужен.

Можно ли в любом случае ограничить триггер только определенными полями в документе?

exports.onOrderUpdated = functions.firestore
.document('orders/{orderId}').onUpdate((change, context) => {

    var db = admin.firestore();

    try{
        const orderDataSnap = change.after.data();
        var userId = orderDataSnap.uid;
        var orderStatus = orderDataSnap.status;
    }catch(error){
        return handleErrorToUser(error);
    }

Здесь я хочу выполнять эту функцию, только когда userId и status изменения в этом документе

Есть ли еще способ сделать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Согласно документации Изменение , есть before и after снимки .

Вы можете вызвать метод data() для каждого из это они и проверяют, равны ли userId и status в копиях до и после. Если это так, просто вернитесь из функции пораньше.

2 голосов
/ 10 апреля 2020

Нет, никакой возможности активировать облачную функцию нет, только если изменены некоторые определенные поля c документа. Как объяснил samdy1 в его ответе, в облачной функции вы можете обнаружить, какие поля изменились (ve), но для этого должна быть запущена облачная функция .

One решение состоит в том, чтобы записать документ в другую выделенную коллекцию параллельно с изменением.

Например, если вы обновляете документ новым status, вы пишете do c в коллекцию statusUpdates с идентификатором родительского документа заказа и значением статуса, и вы запускаете облачную функцию на основе создания этого документа.

Конечно, это подразумевает создание документа и имеет стоимость (Кроме того, к срабатыванию CF). В зависимости от частоты обновлений вам решать, нужно ли вычислять, будет ли этот подход дешевле, чем подход, заключающийся в бесполезном запуске функции Cloud для документа заказа.

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