0

Firebase Cloudの新機能です。Firebase Cloud Functions - Synchronous Functions

exports.countFruits = functions.database.ref("fruits/{FruitID}").onWrite(event =>{ 

(...) 

    var sauces = []; 

    let ref = admin.database().ref("sauces"); 
    ref.on("child_added", function(snapshot, prevChildKey){ 

    let sauce = snapshot.val(); 
    sauces.push(sauce.id); 
    }); 

// -> USE THE COMPLETED ARRAY FOR NEXT ANOTHER PURPOSE 

}); 

だから私の問題は、私はそれが実際に満たされている間にCOMPLETED配列を使用したいということ、である:私は次のように私index.jsを作りたいです。その結果、私はコードを同期的に構造化したいので、次の関数はすべてのsauce.idが配列にあるときにのみ実行されます。

どうすればいいですか?

ありがとうございました!

答えて

0

child_addedイベントを受信すると、後で子が追加されるたびに、既存の子のそれぞれに対してハンドラが呼び出されます。だから、すべての子供たちが処理されたときに明確な瞬間はありません。

あなたは現在のすべての子を処理したい場合は、このように、あなたは、once("value"ハンドラを使用する必要があります。

exports.countFruits = functions.database.ref("fruits/{FruitID}").onWrite(event =>{ 

(...) 

    var sauces = []; 

    let ref = admin.database().ref("sauces"); 
    ref.once("value", function(snapshot){ 
     snapshot.forEach(function(sauceSnapshot) { 
     let sauce = snapshot.val(); 
     sauces.push(sauce.id); 
     }); 
     // -> USE THE COMPLETED ARRAY FOR NEXT ANOTHER PURPOSE 
    }); 
}); 
+0

まず第一に、あなたに感謝!このコードを使用すると、配列[undefined]しか得られないので、今すぐsauce.idにアクセスできないようです。助言がありますか? – ktm125

+0

このコードでは、オリジナルのコードのように、 '/ sauces/{sauceId}/id'があると仮定しています。あなたの実際のJSON(テキストとして、スクリーンショットなし)を見ることなく、そのidがそこにない理由を言うのは不可能です。これは、[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data)の[Export JSON]リンクをクリックすると表示されます。 –

+0

データベース構造は次のようになります。/ sauces/{sauceType}/{sauceID}/id – ktm125

関連する問題