Firebase实时数据库事务返回null

时间:2018-12-14 10:36:14

标签: firebase firebase-realtime-database transactions

我正在实时数据库中使用firebase事务来获取最新计数,但它返回null而不是计数。我不知道我在此查询中做错了什么。

  export const updateDashboardCount = (id, childName) =>
  db.ref('dashboard/' + id).child(childName).transaction((data) => {
    console.log('data is', data);
  });

id为-LT0uc53cRmufLotuGd0,ChildName为雇员。

我收到的输出为空

Dashboard

2 个答案:

答案 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.lognull的{​​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)

现在将正确设置数据