1. ホーム
  2. javascript

[解決済み] Firebaseで複数のキーでクエリを実行する

2022-02-26 13:52:53

質問

Firebase データベースに既知のキーのリストがあります。

-Ke1uhoT3gpHR_VsehIv
-Ke8qAECkZC9ygGW3dEJ
-Ke8qMU7OEfUnuXSlhhl

これらのキーをループしてそれぞれのオブジェクトのスナップショットを取得するのではなく、1つの統一されたリクエストでこれらのキーのそれぞれを照会するにはどうしたらよいでしょうか。Firebaseはこれを提供していますか?

を発見しました。 Promise.all() しかし、firebase のデータを取得する標準的な方法を用いて、どのように実装すればよいのかわかりません。

var userId = firebase.auth().currentUser.uid;
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
  var username = snapshot.val().username;
});

ご協力ありがとうございました。

解決方法は?

Davidのコメントにあるように、アイテムが何らかの形で関連している場合、それらをすべて取得するクエリを作成することができるかもしれません。

そうでなければ、これで十分です。

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());
  });
});

各項目を個別のリクエストで取得しても、リクエストはすべて1つのコネクションで送信されるので、思ったほど遅くはないことに注意してください。それについての詳しい説明は SNSアプリの投稿取得を高速化するために、1つのイベントを繰り返し観測するのではなく、クエリを使用する。 .