我有这样的云功能:
exports.updateNewsCount = functions.database.ref('/channels/{channelId}/news/{newsId}/')
.onWrite (event => {
const channelId = event.params.channelId;
const newsId = event.params.newsId;
let CntRef = admin.database().ref('/channelDetails/' + channelId + '/newsCnt');
if (event.data.exists() && !event.data.previous.exists()){
return CntRef.transaction(function(current){
if (current){
console.log ('current is not null');
return (current || 0) + 1;
}
else {
console.log('current is null');
return current;
}
},function(error, b, d){
if (error)
console.log(error);
else
console.log ('error is null');
if (b)
console.log('boolean is true');
else
console.log('boolean is false');
if (d)
console.log('snapshot is ' + d);
else
console.log ('snapshot is null');
}).then(()=>{});
} else if (!event.data.exists() && event.data.previous.exists()){
return CntRef.transaction(function(current){
if (current)
return (current || 1) - 1;
else
return current;
}, function(error, b, d){if (error) console.log(error); if (d) console.log(d);}).then(()=>{});
}
});
随着我可以看到日志条目,它会一直闪烁。但是,newsCnt字段未按预期更新。有时它会更新,有时不会!我在这里做错了什么?
答案 0 :(得分:1)
您应该期望可能多次调用事务,第一次使用null。交易的方式就是这样。请阅读文档here。
特别注意该部分中的以下标注:
注意:因为您的更新函数被多次调用,所以必须这样做 能够处理空数据。即使您的现有数据存在 远程数据库,它可能不会在事务时本地缓存 函数运行,导致初始值为null。