2017-09-01 71 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? –