Огненная база облачных функций тигров наСоздание и наДалое состояние гонки - PullRequest
0 голосов
/ 07 мая 2018

У меня есть два триггера Firebase для увеличения и уменьшения событий для событий onCreate и onDelete соответственно.

Сценарий :

Когда пользователю что-то нравится на клиенте, в базе данных firebase создается новый путь, и тигр onCreate переключается. Затем счет увеличивается, как я и ожидал.

Когда пользователь «что-то не любит» на клиенте, в базе данных firebase удаляется путь и запускается триггер onDelete. Затем счет уменьшается.

Выпуск :

Когда пользователю что-то быстро нравится, а затем что-то не нравится, оба запроса на создание нового пути и удаление существующего пути отправляются в firebase практически одновременно.

Иногда триггер onDelete срабатывает перед тигром onCreate.

Я действительно ищу некоторое представление о лучших практиках здесь или о тех, кто уже сталкивался с подобной ситуацией.

Вот расширенная версия моих функций onCreate и onDelete

exports.increaseCount = functions.database.instance(dbInstance).ref('/path/to/existingPath')
.onCreate((snap, context) => {
 ref.transaction(function(count) {
    return (count || 0) + 1;
 }
});

exports.decreaseCount = functions.database.instance(dbInstance).ref('/path/to/newPath').onDelete((change, context) => {
dbRef.transaction(function(count) {
    if(count && (count > 0)){    
        var newCount = count - 1;
        return newCount;
    } else {
        return 0;
    }
 }
});

1 Ответ

0 голосов
/ 07 мая 2018

Это на самом деле не состояние гонки. Следует ожидать, что триггеры Cloud Functions могут срабатывать не по порядку. Это связано с тем, что разные функции могут выполняться на разных экземплярах сервера, и было бы невозможно, чтобы все они каким-то образом разделяли смысл упорядочения событий. Это означает, что вам может потребоваться выполнить дополнительную проверку транзакций, чтобы убедиться, что ваша база данных находится в состоянии, пригодном для текущего вызова функции.

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