Функция Firebase admin.database () нулевой параметр в транзакции - PullRequest
0 голосов
/ 31 марта 2020

Я использую функции Firebase с «Spark Plan» (бесплатно). Это часть моей функции:

return query.once("value").then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
  var childData = childSnapshot.val();
  if (childData.displayName === ally) {
    existAlly = true;
    console.log('uid: '+uid)
    var ref = admin.database().ref('users/'+uid).transaction(function (current_value) {
      console.log('current_value: '+uid)
      current_value.mainAlly = ally;
      current_value.coins = (current_value.coins || 0) + 10
      return current_value;
    }).then(() => {
      console.log('New Ally added');
      return true;
    });
...

Здесь в журналах вы можете увидеть "'current_value: null'

Firebase Functions logs

Но, как вы можете видеть на следующем рисунке, «ссылка» верна:

Firebase Database

Итак, это проблема с оплатой? .database () "перестает работать через некоторое время? Или это что-то еще?

Спасибо!


РЕДАКТИРОВАТЬ: Я только что сделал еще один тест, и теперь ошибка в" монетах ", с тем же кодом:

enter image description here

1 Ответ

2 голосов
/ 31 марта 2020

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

Функция транзакции вызывается несколько раз

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

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