有效地将推键添加到推送对象的方法。 - Firebase

时间:2017-09-01 16:50:47

标签: firebase firebase-realtime-database

在我的应用中,用户可以创建新的作业并在他们自己的UID下注册。

let newJobRef = firebase.database().ref(`/jobs/serviceUsers/activeJobs/${currentUser.uid}`);
newJobRef.push(job)

我知道在promise解决后,你得到的快照对象的推送密钥存储为snapshot.key,如下所示:

.then(snapshot => {
  let myPushKey = snapshot.key;
  // do more stuff here
}

但是,在我的应用程序中将此键存储在Job对象本身中非常重要。因此,我必须进行第二次往返并更新最近推送的作业,以将按键添加到其中,作为键值对。

我的问题是:这是正确的方法吗?有没有其他方法可以在单程旅行中将按键添加到对象? (不包括云功能)。我希望有一些保留的firebase语法或单词,当它击中数据库时会自动执行此操作,但却什么也没找到。

非常感谢你!

1 个答案:

答案 0 :(得分:2)

一旦您意识到push()也可以在没有值的情况下调用,这很容易做到:

let userRef = firebase.database().ref(`/jobs/serviceUsers/activeJobs/${currentUser.uid}`);
let newJobRef = userRef.push();
job.key = newJobRef.key;
newJobRef.set(job);

push()的调用是一个纯客户端调用,它只是生成一个具有唯一ID的引用。对set()的调用是在此处将值写入数据库的调用。

请注意,将对象的键存储在该对象中是一种反模式。虽然通常需要在程序中同时具有键和值,但我通常通过传递快照(已经有.key.val())或通过将键注入到对象中来实现。阅读(而不是在数据库本身)。