所以这是让我绊倒的原因:
当用户对帖子进行投票时,他们将获得+2
业力。
用户对某篇文章投反对票时,他们得到+2
业力。
当用户取消/删除他们的投票时,他们将获得-2
因果报应。 (净值0)
被投票的用户帖子获得-2
业力。
被投票的用户帖子获得+2
业力。
当某人取消/撤消其投票时,发布的用户将获得-2
(如果赞成)和+2
(如果赞成)..(净值0)
我不知道这是否有意义,但从本质上讲,我想奖励投票的人,并惩罚因张贴不良帖子而受到惩罚的人。
这是我所拥有的:
在我的数据库中,帖子获得好评时,this.userVote
是1
,下跌时是-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/