Javascript 在js中建立声誉/业力系统
这就是让我绊倒的原因:Javascript 在js中建立声誉/业力系统,javascript,angular,firebase,firebase-realtime-database,Javascript,Angular,Firebase,Firebase Realtime Database,这就是让我绊倒的原因: 当用户对帖子进行投票时,他们会得到+2业力 当用户对帖子投了否决票时,他们会得到+2业力 当用户取消/取消投票时,他们会得到-2业力。(净额0) 被否决的用户帖子获得-2业力 被提升的用户帖子获得+2业力 当某人取消/删除其投票时,如果是向上投票,则发布的用户将获得-2,如果是向下投票,则获得+2。。(净额0) 我不知道这是否有意义,但本质上我想奖励投了票的人,惩罚那些创造坏帖子的人 以下是我所拥有的: 在我的数据库中,当一篇文章获得一个向上投票时,this.user
- 当用户对帖子进行投票时,他们会得到
业力+2
- 当用户对帖子投了否决票时,他们会得到
业力+2
- 当用户取消/取消投票时,他们会得到
业力。(净额0)-2
- 被否决的用户帖子获得
业力-2
- 被提升的用户帖子获得
业力+2
- 当某人取消/删除其投票时,如果是向上投票,则发布的用户将获得
,如果是向下投票,则获得-2
。。(净额0)+2
时,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中没有真正的原子)更新数据的方法
例如,将业力减少1
this.database.database.ref('users/'+this.userData.uid).child('karma')
.transaction(function(karma){
if (!karma)
return 0;
return karma - 1;
});
最后我就这样解决了:
getKarmaDelta(prevVote, vote) {
if((prevVote !== 1 && prevVote !== -1) && (vote === 1 || vote === -1)) {
this.updateUserKarma(2)
} else if (vote === 0) {
this.updateUserKarma(-2)
}
if(vote === -1 || (vote === 0 && prevVote === 1)) {
this.updatePosterKarma(-2)
} else if (vote === 1 || (vote === 0 && prevVote === -1)) {
this.updatePosterKarma(2)
}
}
希望这对其他人有帮助