Как отличить guish от причин, по которым транзакции Firebase возвращают ноль? - PullRequest
3 голосов
/ 11 февраля 2020

Насколько я понимаю, транзакции могут возвращать null по двум причинам:

  1. На узле, где выполняется транзакция, значения нет.
  2. Локальный кеш пуст, поскольку Firebase Cloud Functions не имеет состояния. Следовательно, он может вернуть null в самый первый раз и перезапустить функцию.

Мой вопрос: как мы можем различить guish между этими двумя случаями? Или firebase выполняет различие само по себе?

Myref.transaction(function(currentData) {
    if(currentData != null) {
        return currentData + 1;
    } else {
        console.log("Got null")
        return;
    }
}, function(error, committed, snapshot) {
    if(!committed) {
        // The transaction returned null. 
        // But don't know if it's  because the node is null or 
        // because the transaction failed during the first iteration.
    }
});

В приведенном выше примере обратный вызов транзакции будет передан null, когда значение в Myref не существует и когда он пытается получить данные в самой первой попытке при выполнении транзакции.

Если значение Myref фактически пусто, я хочу, чтобы число 1238484 было заполнено там. Если это не так, и null фактически выбрасывается из-за неправильного чтения транзакции, как мне сделать это различие?

PS: Пожалуйста, не предлагайте прослушиватель на узле. Есть ли другой, более эффективный способ сделать это?

1 Ответ

2 голосов
/ 29 февраля 2020

При первом запуске транзакции и значение, возвращаемое функцией обновления, undefined, onComplete вызывается с ошибкой, равной null

Для последующих запусков, когда нет данных, указана причина прерывания транзакции .

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

error === null && !committed // local cache is empty
error !== null && !committed // there is no data

Это внутренняя деталь реализации, и вы не должны полагаться на нее в своих запросах.

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