作者:SP_Club | 来源:互联网 | 2023-02-11 17:00
我在firebase中有一个值,我需要增加,它受竞争条件的限制,所以我更喜欢这一切.
node: {
clicks: 3
}
我需要设定clicks = clicks + 1
这么久clicks <20
.我可以通过Web API进行一次调用来执行此操作吗?
1> Frank van Pu..:
请参阅交易的参考文档:
var ref = firebase.database().ref('node/clicks');
ref.transaction(function(currentClicks) {
// If node/clicks has never been set, currentRank will be `null`.
return (currentClicks || 0) + 1;
});
上面将简单地以原子方式递增值,而不会让用户选择覆盖彼此的结果.
接下来,确保值永远不会超过20:
var ref = firebase.database().ref('node/clicks');
ref.transaction(function(currentClicks) {
// If node/clicks has never been set, currentRank will be `null`.
var newValue = (currentClicks || 0) + 1;
if (newValue > 20) {
return; // abort the transaction
}
return newValue;
});
为了更好地衡量,您还需要将安全规则设置为仅允许最多20次点击.安全规则在Firebase数据库服务器上实施,因此这可确保即使是恶意用户也无法绕过您的规则.基于Firebase文档中有关验证数据的示例:
{
"rules": {
"node": {
"clicks": {
".validate": "newData.isNumber() &&
newData.val() >= 0 &&
newData.val() <= 20"
}
}
}
}