Firebase транзакция в nodeJs - PullRequest
0 голосов
/ 30 июня 2018

То, что я пытаюсь достичь, это просто увеличить значение в базе данных с помощью транзакции. Это работает для меня, как задумано, но я всегда получаю следующую ошибку в моей консоли Firebase:

Function returned undefined, expected Promise or value

Мой текущий вызов выглядит следующим образом:

exports.reportCounter = functions.database.ref('/user/{userId}/reports/{initiatorId}').onWrite((change,context) => {
const userId = context.params.userId;

return userRef.child(userId).child("numReports").transaction(function(numReports) {
    return change.after.exists()?((numReports || 0) + 1):(numReports - 1);
})
});

Я также попытался вернуть обещание напрямую:

return userRef.child(userId).child("numToIncrement").transaction(function(numToIncrement) {
            return ((numToIncrement || 0) + 1);
 });

В обоих случаях код делает то, что должен, но я все равно получаю указанную ошибку. enter image description here

1 Ответ

0 голосов
/ 01 июля 2018

Вот как вы должны реализовать транзакцию, таким образом, функция всегда возвращает обещание:

exports.reportCounter = functions.database.ref('/user/{userId}/reports/{initiatorId}').onWrite((change, context) => {
  const userId = context.params.userId;
  let increment;
  if (change.after.exists() && !change.before.exists()) {
    increment = 1;
  } else if (!change.after.exists() && change.before.exists()) {
    increment = -1;
  }
  return userRef.child(userId).child("numReports").transaction(function(numReports) {
    return (numReports || 0) + increment;
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...