Firebase函数的getChild值

时间:2019-04-25 10:57:45

标签: javascript firebase firebase-realtime-database google-cloud-functions

我在firebase功能上有问题。我想做的是更新Items的子项时,然后我想获取Count的值并进行进一步的计算,但是我面对的是Firebase日志控制台始终显示错误“ TypeError:无法读取属性'val'的”。

JSON结构

"VTEST" : {
    "A" : {
      "Count" : 5,
      "Items" : {
        "item1" : "apple"
      },
      "NUMBER" : 5
    },
    "B" : {
      "Count" : 8,
      "Items" : {
        "item1" : "orange;"
      },
      "NUMBER" : 3
    },
    "C" : {
      "Count" : 10,
      "Items" : {
        "item1" : "grape"
      },
      "NUMBER" : 7
    },
    "D" : {
      "Count" : 12,
      "Items" : {
        "item1" : "grava"
      },
      "NUMBER" : 10
    },
    "E" : {
      "Count" : 15,
      "Items" : {
        "item1" : "fish"
      },
      "NUMBER" : 12
    },
    "F" : {
      "Count" : 18,
      "Items" : {
        "item1" : "chicken;"
      },
      "NUMBER" : 8
    }
  }

我的代码:

exports.ItemCount = functions.database.ref('/VTEST/{ID}/Items').onUpdate((updateRef, context) => {
        var childCount = updateRef.after.numChildren();
        var newReference = updateRef.after.ref.parent.child('/Count');
        var Count = newReference.val();
        Count = Count + childCount;
        return updateRef.ref.update({Count})
    })

我期望的是Count的值将被更新,但是它始终显示错误:“ TypeError:无法读取未定义的属性'val'” 谁能告诉我我在做什么错,我不明白。

1 个答案:

答案 0 :(得分:1)

问题来自Reference没有val()方法的事实。您需要使用once()方法来获取相应数据库位置的值。

以下改编的代码应该起作用:

exports.ItemCount = functions.database
  .ref('/VTEST/{ID}/Items')
  .onUpdate((updateRef, context) => {
    var childCount = updateRef.after.numChildren();
    var newReference = updateRef.after.ref.parent.child('/Count');
    return newReference.once('value').then(dataSnapshot => {
      var Count = dataSnapshot.val();
      Count = Count + childCount;
      return newReference.parent.update({ Count: Count });
    });
  });

但是,根据您的确切要求,您可以决定使用交易,请参阅https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions