Запрос в базу данных реального времени Firebase через функции - PullRequest
0 голосов
/ 14 декабря 2018

Я использую функции Firebase и Admin SDK для реализации функций триггера событий.Я пытаюсь отправить пользователю уведомление о появлении нового обновления.Поэтому, когда версия обновления меняется с текущей, я хочу внести некоторые изменения в объект пользователя и установить ключ update_available как true

Теперь местоположение отслеживаемого события (update_version) иизменяемые данные находятся в совершенно разных объектах.Модель объекта выглядит следующим образом:

|root
  |- app_info
        |- version

  |- users
        |- <uid>
            |- checker
                  |- update_available: true

Не так давно я достиг этого:

 function setUpdateValueTrue() {
    db.ref().orderByChild("checker/update_available").equalTo("false").once('value', (snapshot) => {
        snapshot.forEach((childSnapshot) => {
          console.log("got in here");
          console.log(childSnapshot.val())
      });
   })
 }

Полагаю, это может быть совершенно неправильно.В данный момент я чувствую себя застрявшим.Любая помощь очень ценится.Моя главная задача - как обойти uid или запросить его.

1 Ответ

0 голосов
/ 14 декабря 2018

Следующее должно работать (не проверено, однако).

Обратите внимание на использование Promise.all(), так как вам нужно обновлять переменное число users узлов параллельно.

exports.versionUpdate = functions.database.ref('/app_info').onUpdate((change, context) => {
    const beforeData = change.before.val(); // data before the update
    const afterData = change.after.val(); // data after the update

    if (beforeData.version !== afterData.version) {

       const promises = [];
       const usersRef = admin.database().ref('/users');

       return usersRef.once('value', function(snapshot) {
          snapshot.forEach(childSnapshot => {
             const uid = childSnapshot.key;
             promises.push(usersRef.child(uid + '/checker/update_available').set(true));
          });
          return Promise.all(promises);
       });

   } else {
      return null;
   }

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