【问题标题】:How to return out of a function correctly?如何正确返回函数?
【发布时间】:2019-08-13 02:57:01
【问题描述】:

所以我的推送通知工作得很好。我遇到的大问题是如果用户喜欢/评论自己的照片,他们将收到自己的推送通知。我不知道如何解决这个问题。例如,假设我喜欢我自己的照片,我收到推送通知“克林特喜欢你的帖子”,这就是我,与评论相同,如果我正在回复对我的帖子的评论。 “克林特评论了你的帖子”。

这是我通过 Atom 编写的用于通知的代码。


exports.observeComments = functions.database.ref('/comments/{postId}/{commentId}').onCreate((snapshot, event) => {
     var postId = event.params.postId;
     var commentId = event.params.commentId;

     return admin.database().ref('/comments/' + postId + '/' + commentId).once('value', snapshot => {
       var comment = snapshot.val();
       var commentUid = comment.uid;

       return admin.database().ref('/users/' + commentUid).once('value', snapshot => {
         var commentingUser = snapshot.val();
         var username = commentingUser.username;

         return admin.database().ref('/posts/' + postId).once('value', snapshot => {
           var post = snapshot.val();
           var postOwnerUid = post.ownerUid;

           return admin.database().ref('/users/' + postOwnerUid).once('value', snapshot => {
             var postOwner = snapshot.val();

             var payload = {
               notification: {
                 body: username + ' commented on your post '

               }
             };

             admin.messaging().sendToDevice(postOwner.fcmToken, payload)
             .then((response) => {
               // Response is a message ID string.
               console.log('Successfully sent message:', response);
               return response;
             })
             .catch((error) => {
               console.log('Error sending message:', error);
               throw new Error('Error sending message:', error);
             });
           })
         })
       })
     })
   })


exports.observeLikes = functions.database.ref('/user-likes/{uid}/{postId}').onCreate((snapshot, event) => {
     var uid = event.params.uid;
     var postId = event.params.postId;

     return admin.database().ref('/users/' + uid).once('value', snapshot => {
       var userThatLikedPost = snapshot.val();

       return admin.database().ref('/posts/' + postId).once('value', snapshot => {
         var post = snapshot.val();

         return admin.database().ref('/users/' + post.ownerUid).once('value', snapshot => {
           var postOwner = snapshot.val();

           var payload = {
             notification: {
               body: userThatLikedPost.username + ' liked your post '
             }
           };

           admin.messaging().sendToDevice(postOwner.fcmToken, payload)
           .then((response) => {
             // Response is a message ID string.
             console.log('Successfully sent message:', response);
             return response;
           })
           .catch((error) => {
             console.log('Error sending message:', error);
             throw new Error('Error sending message:', error);
           });
             });
         })
       })
     })

【问题讨论】:

  • 只是为了基本了解,您需要从业务逻辑中排除您登录的用户设备ID。
  • 你有没有我可以参考的例子或来源?
  • @iOSTeam 抱歉忘了提及你..
  • 你的问题解决了吗?
  • @iOSTeam 对不起,我不明白你的意思。

标签: javascript ios push-notification atom-editor


【解决方案1】:

如果我理解正确,您只需要添加中断条件。 加在

之后

var postOwnerUid = post.ownerUid;

这行:

if(commentUid === postOwnerUid)
  return Promise.resolve();

之后

var post = snapshot.val();

这行:

if(uid === post.ownerUid)
  return Promise.resolve();

【讨论】:

  • 感谢您的回复!我对这种语言不太熟悉,当你说添加中断条件时,我需要在任何地方添加break;吗?
  • 不,就是这样。您不需要添加任何其他内容。我的意思是像“break”这样的表达,而不是明确的“break”。
  • 你介意告诉我我是否做得对吗?我将它添加到 oberseveComments 代码中。但是现在我根本没有收到任何关于 cmets 的通知。我将更新我的问题并立即添加代码。 @Maciej Fryta Frydrychowicz
  • 想通了,我只是没有正确定义 UID。谢谢你
猜你喜欢
  • 2022-01-18
  • 2013-06-06
  • 2011-10-29
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2022-10-07
  • 2011-08-16
  • 2014-01-03
相关资源
最近更新 更多