Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从push()firebase中提取id?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 如何从push()firebase中提取id?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,有人能解释一下为什么firebase的唯一id以“-”开头吗 我有两个问题: 如果有人返回此请求,如何从push获取id firebase.database().ref('carts/-KJp9LdQkEN1DtuCLjfP/pro').push({ name:name, amount:am }); 在这方面,我尝试处理回调快照。我从这个json中提取数据的所有尝试都失败了 JSON.parse(data) == error snapshot.key(); == error data[

有人能解释一下为什么firebase的唯一id以“-”开头吗

我有两个问题:

如果有人返回此请求,如何从push获取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);
});
这些键(通常称为“推送ID”)以
-
开头,因为这是用于生成它们的字典中的第一个字符。看这个

如果您试图获取要添加的项目的推送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('value', function(snapshot) {
  snapshot.forEach(function(cartSnapshot) {
    console.log(cartSnapshot.key); // -KJ....
    console.log(cartSnapshot.val());
  });
});
如果要确定侦听器中项目的键,可以这样做:

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('value', function(snapshot) {
  snapshot.forEach(function(cartSnapshot) {
    console.log(cartSnapshot.key); // -KJ....
    console.log(cartSnapshot.val());
  });
});
更有可能的是,如果你在听孩子们的话,你会通过以下方式得到答案:

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

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('value', function(snapshot) {
  snapshot.forEach(function(cartSnapshot) {
    console.log(cartSnapshot.key); // -KJ....
    console.log(cartSnapshot.val());
  });
});

非常感谢!第一个解决方案确实非常有效!虽然第二个只是给出了位置,就像在这个例子中,我得到了“carts”,这是正确的。如果您正在收听儿童节目(例如,添加了
child\u
),则可以通过
snapshot.key
获得每个儿童的密钥。我将添加更多的代码。@FrankvanPuffelen请更正console.log(cartSnapshot.val();)的语法错误,您能告诉我如何只获取一个子项的值吗?我不想迭代所有子项!对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也将包含一个结果列表。@FrankvanPuffelen您好,我们如何检索特定对象(当它被添加到列表中时,例如
/users
使用
push()
),我们是否需要提供密钥!如果是,如何获取该密钥以将其提供给param,例如,
/users/${key}
,可能我没有正确理解这一点,如果我的问题很愚蠢,请原谅。