2017-09-01 40 views
0

在我的应用程序中,用户可以创建新的作业并在他们自己的UID下注册它们。高效地将推送键添加到推送对象的方法。 - Firebase

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

我知道这个承诺已经解决后,你会得到它具有存储snapshot.key像这样推键快照对象:

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

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

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

非常感谢您提前!

回答

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())或在读取时将密钥注入对象(而不是数据库本身)。

+0

非常感谢您帮助过我多次:)还有一个跟进问题。我没有安静地理解你是如何通过在对象本身中传递没有唯一ID的?从数据库读取数据时如何注入UID? –