問題タブ [firebase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
22456 参照

javascript - Firebaseを使用したデータベーススタイルのクエリ

Firebaseでデータベーススタイルのクエリを実行する高速な方法はありますか?

例えば:

usersフィールド、、、、をuser_id含むnameFirebaseリファレンスが与えられた場合、age次のようなクエリを実行するための最良の方法は何でしょうか。

0 投票する
3 に答える
7922 参照

firebase - Firebaseのレコードの総数(カウントはいつ完了しますか?)

テーブル内のレコードを数えることは、皆さんがすでに作業中のその気の利いた新機能のいくつかを手に入れるまで、明らかに手動の作業です;)

ただし、カウントをフェッチするために.on('value'、...)を使用して手動で実行しても、行き詰まります。

私はあらゆる種類のページ付けで同じ問題を予測しており、これについて少し頭を悩ませているように感じます。私は何が欠けていますか?

これは、たとえば、ユーザーがキューに持っているメッセージの数を取得するための根本的に間違ったパターンですか?

0 投票する
1 に答える
964 参照

javascript - Firebase child_added

現在、アプリは動作していますが、なぜ動作するのかわかりません...

次のようなコードがありました。

問題は、itemRef後で使用しようとしたときに機能しなかったことです。itemRef.name()ただし、参照の正しい名前が返されたため、参照が機能していないことに気付くまでに数時間かかりました。

APIを検索しているときに、関数に出くわしました.ref().ref()API は、 「この DataSnapshot を生成した場所の Firebase 参照」を返すと述べています。これにより、関数は完全に無意味に聞こえましたが、試してみることにしました。

.ref()「このDataSnapshotを生成した場所のFirebase参照」を返すだけなのに、なぜ私の参照が機能したのか、誰でも説明できますか。??

0 投票する
1 に答える
1865 参照

firebase - Firebase child_removed が呼び出されていない

これが私のコードの基本的な考え方です。実際のコードから多くの余分なものを削除しましたが、ほとんどは css でした - どれもこれに影響を与えるべきではありません...

問題は、$("#button")クリックすると、itemRef が Firebase の listRef から削除されることですが、'child_removed'イベントがトリガーされることはありません...

それからchild_removed呼ばれます...

他のすべてが機能します-$("#name")更新され、alert()テストに使用しているすべてのダイアログが正常に機能しています-唯一の問題はchild_removed呼び出されていません。

0 投票する
3 に答える
11267 参照

javascript - 関数での非同期呼び出し(Firebase)の処理

何度か、Firebaseを使用した同期関数と非同期関数で問題が発生しました。私の問題は、自分が作成した関数内で非同期のFirebase呼び出しを行う必要があることです。簡単な例として、オブジェクトの速度を計算して表示する必要があり、Firebaseに距離と時間が保存されているとします。

もちろん、上記のコードはfirebaseRef.once()非同期呼び出しであるため機能しません。したがってvelocity、に到達した時点ではまだ設定されていませんreturn velocity;returnコールバック関数の内部に配置する.on()と、何も返されません。

1つの解決策は、calcVelocity()関数を非同期にすることです。

別の解決策は、同期的に読み取られるがFirebaseから非同期に更新されるFirebaseのキャッシュバージョンを保存することです。

これらのソリューションの1つは他よりも優れていますか?そして、より良い解決策はありますか?

0 投票する
2 に答える
1535 参照

javascript - Ajax / Firebase は localhost でのみ動作します (同一オリジン ポリシー?)

localhost で完全に動作する Firebase アプリがありますが、(ルーターでポート フォワーディングを許可することによって) 外部からアクセスしたり、Bluehost にアップロードしたりすると機能しません。

このコードは機能します:

しかし、これはしません:

いくつかの調査を行った後、 Firebase JS インクルードは

しかし、私のfirebase参照はオンです

これを回避する方法をいくつか見つけましたが、Firebase で処理する最善の方法を知りたいです (または、Same Origin Policy がここで問題になっている場合)。

0 投票する
2 に答える
931 参照

firebase - リストに追加するときの Firebase transaction() のような機能?

これはかなり複雑な質問ですが、できるだけ簡単かつ簡潔に説明しようとします...

Firebase を使用して、マルチユーザーの Web ベースのゲームを構築しています。ゲームのすべてのラウンドのリストを保持しています。ラウンドの最後に、次のラウンドを開始する準備ができたときにクリックする「開始」ボタンがすべてのユーザーに表示されます。少なくとも 50% のユーザーが「開始」をクリックすると、ラウンドが開始されます。

gameRefゲームの Firebase リファレンスroundListRef、ラウンドのリストを表すリファレンス、およびroundRef現在のラウンドを表すリファレンスがあります。

新しいラウンドが追加されたときに全員の現在のラウンドになるように、child_addedコールバックを添付しました。roundListRef

そこから 50% を簡単に追跡newRoundVotesして計算できます。activePlayers50% に達すると、新しいラウンドが追加され、全員のchild_addedイベントがトリガーされ、そこから新しいラウンドが開始されます...

私の質問は、新しいラウンドが 1 つだけ追加され、全員が同じラウンドに参加していることを確認するにはどうすればよいですか?

たとえば、10 人のプレイヤーがいて、4 人が次のラウンドの開始に投票したとします。5 番目のプレイヤーからイベントがトリガーされる前に 6 番目のプレイヤーが投票した場合、6 番目のプレイヤーchild_addedのラウンドも追加されます。

.set()問題はvsに似て.transaction()いますが、まったく同じではありません (私の理解から)。

誰にも解決策がありますか?

0 投票する
5 に答える
51457 参照

firebase - Firebasechild_addedは子を追加するだけです

Firebase APIから:

子の追加:このイベントは、この場所の最初の子ごとに1回トリガーされ、新しい子が追加されるたびに再度トリガーされます。

いくつかのコード:

しかし、この場所では子ごとに関数が1回呼び出されるので、実際に追加された子だけを取得する方法はありますか?

0 投票する
2 に答える
3581 参照

firebase - .off によるイベントの無効化

私の .on イベントのほとんどはクロージャを使用しています:

つまり、off には元のコールバック ポインタと eventType が必要なため、.off() でこれらのモニタを無効にすることはできません。どうすればこのようなことができますか?

私のアプリ (jQuery Mobile) はページベースです。ユーザーが特定のページにアクセスしたときに、モニターをアクティブにしたい。ユーザーがそのページを離れたときに非アクティブ化したいので、再入力したときに複数のモニターにならないようにします。eventType のみで .off() を呼び出し、すべてのコールバックを削除したいと思います。

0 投票する
4 に答える
3257 参照

javascript - JavaScriptのデータ構造にアクセスする2つのコールバックをどのように処理しますか?

更新2: これはより良い説明だと思います:

2つのコールバックがあり、それぞれが配列を埋めています。どういうわけかこれらの配列をマージしたいと思います。これを行うための単純な方法は、配列がいっぱいになるまで待ってから、forループでマージすることです。コールバックが「完了」したかどうかを確認する実際の方法がないため、これを行うことはできません。

次のステップは次のようになります。オブジェクトがコールバックによってダウンロードされるたびに、マージ配列(混合と呼ばれる)をチェックし、「パートナー」オブジェクトが含まれているかどうかを確認します。含まれている場合:次に、そのパートナーオブジェクトにマージします。そうでない場合は、そのオブジェクトを挿入します。

競合状態が心配です。コールバック1は配列が空であることを確認し、配列に挿入することを決定しますが、コントロールは最初に挿入するコールバック2に切り替わります。コールバック1は挿入ではなくマージする必要がありますが、コントロールが元に戻ると、代わりに挿入されます。

コードのアトミックな「チェックと挿入/マージ」ブロックを作成できれば、役立つ可能性があります。それを行う方法はありますか?


アップデート1: コードとさらに多くの単語が追加されました!

みなさん、お返事ありがとうございます。私は行って、コードをできるだけ単純化しようとしました。

言葉:

混合という配列があります。混合は、最終的に次のようになります。タイプ(A)のすべてのオブジェクト、およびタイプ(B)のアナログオブジェクト(「プライベート」とも呼ばれます)がある場合は、それらをマージする必要があります。

これは、コールバックを使用する2つの関数getAllAとgetAllBを使用することを意味します。今、私は両方を呼び出し、少し手動で待ってから、そのマージを行うforループを実行します。

私がする必要があるのは、コールバックでマージが行われるようにコードを編集することです。ただし、競合状態を作成しない方法でマージする方法は考えられません。

素朴に、私は最初にタイプAのオブジェクトと混合して埋め、次にBオブジェクトを反復処理し、必要に応じてそれらをマージしたいと思うかもしれません。ただし、Firebaseでon( "contact_added")を使用して「完了」したかどうかを確認する方法がないため、これを行うことはできません。並行配列構造が欲しいと思いますが、組み込みの配列の使い方がわかりません。自分で作ったのかどうかを確認する方法がわからないので、自分で作るのが心配です。競合状態はそのように注意が必要です。

ここで、コード: 参照する必要のあるスクリプトは次のとおりです。

そして、これが私がjavascriptコンソールに貼り付けるものです:

私がやりたいのは、ロジックをforループからコールバックに移動することです。forループをすぐに実行すると、配列はまだコールバックを介してダウンロードされないためです。


古いエントリ:

Firebaseのデータリストにアクセスする2つのコールバックがあります。

コールバック1はタイプAのオブジェクトを取得します。コールバック2はタイプBのオブジェクトを取得します。

私の目標は、タイプAとタイプBのオブジェクトを適切にマージする配列を用意することです。

タイプBのほとんどの(ただし必然的にすべての)オブジェクトには、タイプAの「パートナー」オブジェクトがあります。タイプAのいくつかのオブジェクトには、タイプBのパートナーオブジェクトがあります。

Firebaseから取得したオブジェクトごとに、パートナーが配列に含まれているかどうかを確認したいと思います。そうでない場合は、挿入します。その場合は、代わりにパートナーと「マージ」します。

同時データ構造なしでこれを行う方法を考えることはできませんが、Javascriptでそれを行う方法がわかりません。

どうすればその並行配列を作成できますか、または他の方法で目標を達成する方法を見つけることができますか?