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

时间:2017-05-19 15:59:55

标签: firebase firebase-realtime-database

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

function saveItem(){
  const itemId = ref.push().key;
  let newItem = {id: itemId}

  ref.child(`items`)
      .push(newItem)
      .then(() => ref.child(`users/${uid}/items`)
      .push(itemId)
}

在上面的示例中,即使存在itemId变量,我也会生成3个不同的密钥而不是生成密钥。

1 个答案:

答案 0 :(得分:2)

每次push()次调用都会创建一个新的ID。被称为三次的链式推送将创建三个唯一ID。因此,您只需使用一次即可获得唯一ID。然后,如果您想要写入某个地方(在您的情况下为'items / id'),您可以使用set()update()。 Set将覆盖给定位置的所有数据。虽然更新将仅更新较低级别密钥所需的字段。示例如下:

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);
       });
}