2017-09-25 3 views
1

、それは非常に似ているので、私は、参照としてthis questionを使用しています。また、上の変化を聞きながら、私は、彼らのために照会する方法をクエリ複数のキーを変更を聴きながら - Firebase

-Ke1uhoT3gpHR_VsehIv 
-Ke8qAECkZC9ygGW3dEJ 
-Ke8qMU7OEfUnuXSlhhl 

とも彼らはすべてのノードの下に存在しないことを知っている(のは/itemsを言わせて)、:

私は定義されたキーのセットを持っている場合これらのキー(別名myRef.once(value)を使用しますがmyRef.on('value', snapshot => { ... })

を使用していない私はこれが可能である知っている:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
var promises = keys.map(function(key) { 
    return firebase.database().ref("/items/").child(key).once("value"); 
}); 
Promise.all(promises).then(function(snapshots) { 
    snapshots.forEach(function(snapshot) { 
    console.log(snapshot.key+": "+snapshot.val()); 
    }); 
}); 

それはSTですaticスナップショット。変更を聞きながら同じことをすることは可能でしょうか?

+0

あなたは何を達成しようとしているの?リンクされた答えの中の 'Promise.all()'は、すべてのデータがいつロードされたかを確実に検出できるようにすることでした。通常の/ on()リスナーを使用することを示しているので、値を待つためのユースケースは何ですか? –

+0

@FrankvanPuffelenキーはフィードに表示されるジョブを表します。フィード内のジョブがリアルタイムで更新されるようにしたいと思います(ジョブの作成者がジョブ時間を更新したと言うことができます)。 –

+0

通常の 'on()'リスナーのような音が働き、 'Promise.all()'は必要ありません。あなたの質問のコードは、リンクした私の答えからの1:1のコピーです。すでに 'on()'でリスナーを追加しようとしましたか? –

答えて

1

また、私はこのために探しています。だからFirebaseは効率的な接続を持っているため、接続パフォーマンスのために 'クエリ'を組み合わせる必要はありません。

したがって、すべてのキーに対してon('value', ...)イベントリスナーを設定することになります。唯一の改善がコールバック関数を定義するか、他あなたはできるだけ多くのコールバック関数を作成しますでしょう

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
function itemUpdate(snapshot) { 
    console.log(snapshot.key+": ", snapshot.val()); 
} 
var ref = firebase.database().ref("/items/"); 
keys.forEach(function(key) { 
    ref.child(key).on("value", itemUpdate); 
}); 

:あなたはそれのために書くことができるコードは、あなたの質問に指定されたコードフラグメントに基づいて、このようになります。あなたはvarを参照するためにキーを持っています。

関連する問題