![](/img/trans.png)
[英]Deleting a node from firebase database using firebase cloud functions
[英]Copy value from one node to multiple other nodes using Firebase Cloud Functions
我才剛剛開始研究Firebase Cloud Functions,並且正在努力尋找在服務器端的數據庫節點之間復制數據(散發數據)的示例。 更具體地說,當特定用戶(例如uid“ PdXHgkfP3nPxjhstkhX”)更新/ users節點上的URL(字典鍵“ link”)時,我想將該值復制到該用戶“ link”的所有實例上/ friendsList節點。 到目前為止,這就是我所擁有的。 如果我采用錯誤的方法,請告訴我。
exports.fanOutLink = functions.database.ref('/users/PdXHgkfP3nPxjhstkhX/link').onWrite(event => {
friendsListRef = admin.database().ref('/friendsList');
//if there's no value
if (!event.data.val()){
//TBD
}else{
//when there is a value
let linkURL = event.data.val()
friendsListRef.once("value", function(snap)){
snap.forEach(function(childSnapshot)){
let childKey=childSnapshot.key;
admin.database().ref('/friendsList/'+childKey+'/PdXHgkfP3nPxjhstkhX/link').set(event.data.val());
}
}
}
})
您沒有兌現承諾,這意味着Cloud Functions可能會在代碼寫入數據庫之前終止您的代碼,或者可能會使代碼的運行(並因此向您收費)的時間超過了所需時間。 我建議在這里閱讀更多內容或觀看此視頻 。
在您的情況下,簡單的解決方法非常簡單:
exports.fanOutLink = functions.database.ref('/users/PdXHgkfP3nPxjhstkhX/link').onWrite(event => {
friendsListRef = admin.database().ref('/friendsList');
if (!event.data.val()){
return; // terminate the function
}else{
let linkURL = event.data.val()
return friendsListRef.once("value", function(snap)){
var promises = [];
snap.forEach(function(childSnapshot)){
let childKey=childSnapshot.key;
promises.push(admin.database().ref('/friendsList/'+childKey+'/PdXHgkfP3nPxjhstkhX/link').set(event.data.val()));
}
return Promise.all(promises);
}
}
})
您會看到,我幾乎只是傳遞了once()
的返回值,而組合的set()
調用了該函數的后退(或退出該函數),以便Cloud Functions知道何時完成所有操作。
但是,請徹底學習帖子,視頻和其他材料,因為這對於編寫Cloud Functions非常重要。
如果您通常不熟悉JavaScript,那么Cloud Functions for Firebase並不是學習它的最佳方法。 我建議先閱讀Web開發人員的Firebase文檔和/或Web開發人員的Firebase代碼實驗室 。 它們涵蓋了許多基本的JavaScript,Web和Firebase交互。 在那之后,您將更加有能力為Cloud Functions編寫代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.