i具有以下数据结构:
/users
/{user_uid}
/lists
/{list_uid}
使用云功能,我希望能够在数据库的根部具有/list_count
参考,以便能够轻松跟踪列表的数量计数而无需进行胖客户端的调用来计数它们。<<<<<<<<<<<</p>
目前我有此实现,我觉得有些丑陋:
exports.countlists = functions.database.ref('/users/{uuid}/lists').onWrite(event => {
const ref = event.data.ref.parent.parent.parent.child('list_count');
return ref.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
}
else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
});
问题是我在firebase控制台中遇到错误:
错误序列化返回值:TypeError:将圆形结构转换为JSON
,如上所述:
您遇到的问题是,Ref.Transaction返回的承诺值不像JSON那样序列化。解决此问题的最简单方法(在我们在firebase SDK中修复它之前)是将值转换为诸如null之类的东西。
我认为要解决您的问题,请执行此操作:
exports.countlists = functions.database.ref('/users/{uuid}/lists').onWrite(event => {
let root = admin.database().ref(`users/${event.params.uuid}/lists/list_count`)
return root.transaction(function(current){
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
}
else{
return (current || 0) - 1;
}
}.then(() => null));
});