1

複数の firebase 参照を次々に取得しようとすると、最後のリクエストのコールバックのみが呼び出されます。

以下では、異なるデータの3つのfirebase参照を取得しようとしています

console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users');
firebaseRef1.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Users');
} );
console.log('authenticating Messages');
var firebaseRef2 = new Firebase('https://stckflw.firebaseio.com/Messages');
firebaseRef2.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Messages');
} );
console.log('authenticating Emails');
var firebaseRef3 = new Firebase('https://stckflw.firebaseio.com/Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Emails');
} );

私はこのようなログを見ています

認証 ユーザー
の認証 メッセージ
の認証 電子メールの認証

メールの認証コールバック

認証時に3つのコールバックすべてを次々に取得することを期待しているので、次のようなログが表示されることを期待しています

認証 ユーザー
の認証 メッセージ
の認証 電子メールの認証

ユーザーの
認証コールバック メッセージの
認証コールバック 電子メールの認証コールバック

これが発生する原因はここにありますか?

認証時にすべてのコールバックがトリガーされるように、何も見逃すことなく実現したいと考えています。

ここに例を作成しましたhttp://jsfiddle.net/aniruddhbk/rvkz9mrt/4/

4

1 に答える 1

1

認証は非同期で行われるため、これらの呼び出しは次々に実行れるのではなく、ほとんどが並行して実行されます。新しい認証呼び出しを開始すると、既存のものは自動的にキャンセルされます。ユースケースについてあまり理解していなくても、参照を作成するときに追加の (文書化されていない) パラメータを渡すことで、各 Firebase を独自のコンテキスト/セッションで開始できます。Firebase

console.log('authenticating Users');
var firebaseRef1 = new Firebase('https://stckflw.firebaseio.com/Users', 'Users');
firebaseRef1.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Users');
} );
console.log('authenticating Messages');
var firebaseRef2 = new Firebase('https://stckflw.firebaseio.com/Messages', 'Messages');
firebaseRef2.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Messages');
} );
console.log('authenticating Emails');
var firebaseRef3 = new Firebase('https://stckflw.firebaseio.com/Emails', 'Emails');
firebaseRef3.authWithCustomToken('<token>',function(error, authData){
    console.log('authentication callback for Emails');
} );

これにより、各呼び出しが完了し、1 つの Firebase クライアントで 3 つの同時認証セッションが可能になります。

authenticating Users
authenticating Messages
authenticating Emails
authentication callback for Users
authentication callback for Messages
authentication callback for Emails

加藤が言ったように、おそらくこれを行わ、3 つのセッションすべてのアクセス許可を単一のトークン/セッションに結合する方法を見つける方がよいでしょう。

于 2015-09-03T23:13:57.303 に答える