簡體   English   中英

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM