如何从push()firebase中提取id?

时间:2016-06-09 18:20:03

标签: javascript firebase firebase-realtime-database

有人可以解释一下为什么firebase的唯一ID以' - '开头?

我有两个问题:

如果有任何返回此请求,我如何从推送中获取id?

firebase.database().ref('carts/-KJp9LdQkEN1DtuCLjfP/pro').push({
  name:name,
  amount:am
});

在这部分我正在尝试处理回调快照。我从这个json中提取数据的所有尝试都失败了。

JSON.parse(data) == error
snapshot.key(); == error
data[0] == error

firebase.database().ref('carts/').on('value', function(snapshot) {
  var data = snapshot.val();
  console.log(data);
});

1 个答案:

答案 0 :(得分:4)

这些键(通常称为“push id”)以-开头,因为这是用于生成它们的字典中的第一个字符。请参阅此blog post explaining how they are generated

如果你想获得你正在添加的项目的推送ID,你可以这样做:

var newRef = firebase.database().ref('carts/-KJp9LdQkEN1DtuCLjfP/pro').push();
console.log(newRef.key);
newRef.set({
  name:name,
  amount:am
});

如果要确定侦听器中项目的键,可以这样做:

firebase.database().ref('carts/').on('value', function(snapshot) {
  console.log(snapshot.key); // carts
  var data = snapshot.val();
  console.log(data);
});

如果你正在倾听孩子的话,你很可能会得到关键:

firebase.database().ref('carts/').on('child_added', function(snapshot) {
  console.log(snapshot.key); // -KJ....
  var data = snapshot.val();
  console.log(data);
});

或者像这样:

firebase.database().ref('carts/').on('value', function(snapshot) {
  snapshot.forEach(function(cartSnapshot) {
    console.log(cartSnapshot.key); // -KJ....
    console.log(cartSnapshot.val());
  });
});