Firebase 一个为链式推送生成的密钥

Firebase 一个为链式推送生成的密钥,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,有没有办法让.push()| |.push().key为链接的.push()生成一个密钥 函数saveItem(){ const itemId=ref.push().key; 让newItem={id:itemId} ref.child(`items`) .push(新项目) .then(()=>ref.child(`users/${uid}/items`) .push(itemId) } 在上面的示例中,我将生成3个不同的键,而不是生成一个键,即使存在itemId变量。每个push()cal

有没有办法让
.push()| |.push().key
为链接的
.push()
生成一个密钥

函数saveItem(){
const itemId=ref.push().key;
让newItem={id:itemId}
ref.child(`items`)
.push(新项目)
.then(()=>ref.child(`users/${uid}/items`)
.push(itemId)
}
在上面的示例中,我将生成3个不同的键,而不是生成一个键,即使存在
itemId
变量。

每个
push()
call将创建一个新id。被调用三次的链式推送将创建三个唯一id。因此,您只需使用一次即可获得唯一id。然后,如果您想写入某个位置(在您的情况下是写入“items/id”),您可以使用
set()
update()
.Set将覆盖给定位置的所有数据。而update将只更新较低级别的所需字段。示例如下:

function saveItem(){
  let ref = firebase.database().ref();
  const itemId = ref.child('items').push().key;
  let newItem = {some: data}

  ref.child(`items/${itemId}`)
      .set(newItem)
      .then(() => {
         let updates = {};
         updates[`/items/${itemId}/someField`] = newData;
         ref.update(updates);
       });
}