Облачная функция Firebase с триггерами базы данных в реальном времени: как обновить исходный узел? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь написать облачную функцию, которая выполняет следующие действия:

  1. Прослушивание нового создания в узле 'posts / {postid} / comments / {commentsid} /'. (Это делается из базы данных pu sh из кода внешнего интерфейса). У этого узла будет UID комментатора в дочернем узле 'uid.
  2. Используя uid в дочернем узле, найдите имя пользователя, псевдоним и изображение профиля комментатора в узле' users / uid 'и зарегистрируйте их. .
  3. Обновите узел 'posts / {postid} / comments / {commentsid} /' соответствующими дочерними узлами для имени пользователя, псевдонима и изображения профиля.

Код ниже Работает нормально, пока последней части, которую пытаются сделать, нет. 3. Сообщение об ошибке «Функция вернула неопределенное, ожидаемое обещание или значение».

Я думаю, что это проблема синтаксиса, заданная c для Firebase. Может ли кто-нибудь указать мне правильный синтаксис для выполнения задачи?

Большое спасибо!

 exports.commentsupdate = functions.database.ref('posts/{postid}/comments/{commentsid}/')
  .onCreate((snapshot,context) => {
     const uid=snapshot.val()['uid'];
     let username="";
     let nickname="";
     let profile_picture="";
     const ref1=database.ref('users/'+uid);
     ref1.once('value',function(ssnapshot){
        username=ssnapshot.val()['username'];
        nickname=ssnapshot.val()['nickname'];
        profile_picture=ssnapshot.val()['profile_picture'];
     }).then(()=>{
        return snapshot.ref.update({
           username:username,
           nickname:nickname,
           profile_picture:profile_picture
       })
    })
});

1 Ответ

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

Вам необходимо вернуть первое Обещание в цепочке Обещаний , т.е. Обещание, возвращенное методом once(), следующим образом:

exports.commentsupdate = functions.database.ref('posts/{postid}/comments/{commentsid}/')
    .onCreate((snapshot, context) => {

        const uid = snapshot.val()['uid'];
        let username = "";
        let nickname = "";
        let profile_picture = "";

        const ref1 = database.ref('users/' + uid);

        return ref1.once('value')   // <--- Note the return here
            .then(snapshot => {
                username = snapshot.val()['username'];
                nickname = snapshot.val()['nickname'];
                profile_picture = snapshot.val()['profile_picture'];

                return snapshot.ref.update({
                    username: username,
                    nickname: nickname,
                    profile_picture: profile_picture
                })

            })

    });

Я бы посоветовал вам посмотреть 3 видео о "JavaScript Promises" из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/

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