有没有办法让.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个不同的密钥而不是生成密钥。
答案 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);
});
}