Как получить значение внутри результата транзакции Firebase через узел js - PullRequest
0 голосов
/ 06 января 2019

Я создаю приложение для iOS, используя Swift, Firebase и Nodejs.

Моя цель:
Всякий раз, когда пользователь отправляет сообщение и записывает данные сообщения (такие как senderId, receiveId, messageText) в базу данных Firebase внутри узла (/ messages / {pushId} /), я хочу увеличить счетчик сообщений на 1, используя метод транзакции, который Firebase предоставляет и отображает уведомление для получателя.

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

a busy cat

Я хочу получить «значение_: 1» (это увеличенное количество сообщений) внутри снимка и поместить его в параметр значка.

exports.observeMessages = functions.database.ref('/messages/{pushId}/')
 .onCreate((snapshot, context) => {

const fromId = snapshot.val().fromId;
const toId = snapshot.val().toId;
const messageText = snapshot.val().messageText;

console.log('User: ', fromId, 'is sending to', toId);

return admin.database().ref('/users/' + toId).once('value').then((snap) => {
  return snap.val();

}).then((recipientId) => {
  return admin.database().ref('/users/' + fromId).once('value').then((snaps) => {
    return snaps.val();

  }).then((senderId) => {
    return admin.database().ref('/user-messages/' + toId + '/totalCount').transaction((current) => {
      return (current || 0) + 1
    }).then((readCount) => {

      console.log('check readCount:', readCount);

      var message = {

       data: {
         fromId: fromId,
         badge: //I want to display the message count here
       },

       apns: {
         payload: {
           aps: {
             alert: {
               title: 'You got a message from ' + senderId.username,
               body: messageText
             },

             "content-available": 1
           }
         }
       },

       token: recipientId.fcmToken
     };

     return admin.messaging().send(message)
     }).then((response) => {
           console.log('Successfully sent message:', response);
           return response;
         })
         .catch((error) => {
           console.log('Error sending message:', error);
           //throw new error('Error sending message:', error);
         })
     })
   })
})

Кто-нибудь знает, как это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 06 января 2019

Документация API для транзакции () предполагает, что обещание от транзакции получит объект со свойством snapshot со снимком данных, которые были записаны в месте транзакции. Итак:

admin.database.ref("path/to/count")
.transaction(current => {
    // do what you want with the value
})
.then(result => {
    const count = result.snapshot.val();  // the value of the count written
})
...