为什么forEach未能按预期循环?

时间:2019-05-18 22:11:28

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

我正在尝试创建一个云功能(在firebase中),该功能可以跟踪我的实时数据库中的posts节点,当发布新帖子时,我的函数应该触发然后执行某些操作。

一切正常,但问题仅在一次循环的forEach方法中发生

这是我的代码

 exports.Notif = 
 functions.database.ref('/Posts/{notification_id}')
   .onWrite((change, context) => 
   {

       const notification_id = context.params.notification_id;

       console.log('A new Post : ', notification_id);

       if(!change.after.val())
       {
           return console.log('A notification has been deleted from the database : ', notification_id);
       }

       const POST = admin.database().ref(`/Posts/${notification_id}`).once('value');

       return POST.then(fromUserResult => 
       {
           const countryCode =  fromUserResult.val().countryCode;
           const post =  fromUserResult.val().post;

           console.log('countryCode : ', countryCode);
           console.log('post : ', post);

           var query = admin.database().ref("Users").once('value');

              return query.then(function(snapshot) {
                snapshot.forEach(function(childSnapshot) {

                 var key = childSnapshot.key;

                 console.log('key : ', key);

                 const senderUserQuery = admin.database().ref(`/Users/${key}`).once('value');

                   return senderUserQuery.then(senderUserNameResult => 
                   {
                       const countryCode2 =  senderUserNameResult.val().countryCode;

                        const token2 = senderUserNameResult.val().token;
                       const uid2 = senderUserNameResult.val().uid;
                       // mute + active

                       if (countryCode === countryCode2 ){

                         console.log('yes  uid : ', uid2);
                       } else{
                         console.log('no  uid : ', uid2);  
                       }

                    return null;

                   });

              });
              return null;
            });


       });

    });

我希望循环访问 Users 节点中存储的所有键,但是发生的事情是第一次循环后它停止了。

经过长时间搜索,我知道问题出在使用 return ,但是我仍然无法解决它。

如果我不使用返回,则会收到此错误Expected catch() or return

如何解决?

0 个答案:

没有答案