我有以下数据结构:
/users
/{user_uid}
/lists
/{list_uid}
使用云功能,我希望能够对我的数据库的根目录进行/list_count
引用,以便能够轻松跟踪列表计数,而无需执行胖客户端打电话来计算它们。
目前我有这个实现,我觉得有点难看:
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
答案 0 :(得分:1)
正如Inlined所说here:
您遇到的问题是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));
});