我正在实时数据库中使用firebase事务来获取最新计数,但它返回null而不是计数。我不知道我在此查询中做错了什么。
export const updateDashboardCount = (id, childName) =>
db.ref('dashboard/' + id).child(childName).transaction((data) => {
console.log('data is', data);
});
id为-LT0uc53cRmufLotuGd0,ChildName为雇员。
我收到的输出为空
答案 0 :(得分:1)
我认为您应该返回data
,如下所示:
export const updateDashboardCount = (id, childName) =>
db.ref('dashboard/' + id).child(childName).transaction((data) => {
console.log('data is', data);
return data;
});
我想您将在以后的版本中更新data
值,而不仅仅是将其记录到控制台。
更新:
如评论中所述,使用上面的代码,您将首先获得console.log
和null
的{strong>,然后得到具有正确数据的console.log
到异步性。
如果您只想获得一个“正确的” console.log
,则可以执行以下操作(请参阅doc)
db.ref('dashboard/' + id).child(childName).transaction((data) => {
return data;
}, function (error, committed, snapshot) {
if (error) {
console.log('Transaction failed abnormally!', error);
} else if (!committed) {
console.log('We aborted the transaction (because ada already exists).');
} else {
console.log('data is' + snapshot.val());
}
});
答案 1 :(得分:0)
Null是预期值。您的问题是您没有返回任何东西,因此未定义的返回导致事务停止。
轻松修复
mycl_by_name = {}
for mycl_instance in mycl_list:
def f():
name = mycl_instance.name
mycl_by_name.setdefault(name, ifilter(lambda _mycl_instance: _mycl_instance.name == name, mycl_list))
f()
for boo_named in mycl_by_name["boo"]:
print (boo_named.name)
现在将正确设置数据