所以这是让我绊倒的原因:


当用户对帖子进行投票时,他们将获得+2业力。
用户对某篇文章投反对票时,他们得到+2业力。
当用户取消/删除他们的投票时,他们将获得-2因果报应。 (净值0)
被投票的用户帖子获得-2业力。
被投票的用户帖子获得+2业力。
当某人取消/撤消其投票时,发布的用户将获得-2(如果赞成)和+2(如果赞成)..(净值0)


我不知道这是否有意义,但从本质上讲,我想奖励投票的人,并惩罚因张贴不良帖子而受到惩罚的人。

这是我所拥有的:

在我的数据库中,帖子获得好评时,this.userVote1,下跌时是-1,删除他们的投票是0

upvote() {
   let vote = this.userVote == 1 ? 0 : 1;
   this.database.list('/upvotes/'+this.postData.id).set(this.userData.uid, vote)
}

downvote() {
    let vote = this.userVote == -1 ? 0 : -1;
    this.database.list('/upvotes/'+this.postData.id).set(this.userData.uid, vote)
}


因此,这按预期的方式工作,并且如上所述。

问题是,我不确定如何设置业力以使其按预期工作。

我当前正在执行以下行以更新用户业力和海报业力:

this.database.database.ref('users/'+this.userData.uid).update({'karma': this.userKarma + karma}) //this.userKarma is the users karma
this.database.database.ref('users/'+this.postData.uid).update({'karma': this.postKarma + karma}) //this.postKarma is the karma of the user who created the post


我应该如何将变量karma设置为如上所述。

有什么建议吗?谢谢!

最佳答案

您可以使用Firebase Transaction system。事务是原子更新数据的一种方法(firebase中没有真正的原子性)。

例如,将业力减少1

this.database.database.ref('users/'+this.userData.uid).child('karma')
    .transaction(function(karma){
        if (!karma)
            return 0;
        return karma - 1;
});

关于javascript - 在js中建立声誉/业力系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49904031/

10-11 11:38