2017-03-29 6 views
1

フレンド。Firebase Datasnapshotリダイレクトを経由してログインした直後に観測可能です。

このように、RxJSのことはAngularに関係しているので、私はそれをやっていません。私はプロミス(ユーザ認証イベント)、 を持っていますが、Firebaseから非同期的にデータを取得しようとしています。

このコードは、ほとんどの場合、ユーザーが(リダイレクトを使用して)ログインした場合を除き、ほとんどの場合、機能します。その場合、 ユーザー認証イベントが発生していると見なします(おそらく)、変更検出サイクルが実行され、UIが現在ログインしているユーザーを示す に更新された場合、(おそらく)データバスイベントが発生します( コンソールにログインしている)が、別の変更検出サイクルがないので、UIはd/bの 新しい情報で更新されません。 UIの テキストフィールドに何かを入力すると、UIスナップショットでUIが更新されます。

私はObservableをFirebaseイベントにObservable.fromEventPattern()で接続します。

すでにログインしていて、 を開くか、ページを更新すると、このことはチャンピオンのように機能します。あなたがログインしようとするとうまくいきません。 がリダイレクトで何が起こっているのかを完全には理解していないとは限りません。

私は間違っていますか? (私は実際に間違って、多くのことをやったと確信しています。)

私はhttps://github.com/JohnL4/FirebaseRxPlay/releases/tag/problem-reproductionに私の問題を再現するおもちゃのアプリケーションがあります。

+0

なぜトリガされないので「近い」票? – JohnL4

答えて

0

私のプロジェクトで同じ問題が発生しました。私はそれがzone.jsに関連しているように感じ、変更がある場合は角度の検出を行います。変更を表示するためにビューの更新を引き起こすアクションをトリガーする必要があるためです。 私はあまりにも

getAuthRedirectResult$(): Observable<firebase.auth.UserCredential> { 
    return new Observable<firebase.auth.UserCredential>(observer => { 
     this.firebaseService.auth.getRedirectResult() 
     .then((result: firebase.auth.UserCredential) => { 
      if (result.user) { 
      this.zone.run(() => { 
       observer.next(result); 
      }); 
      } 
     }) 
     .catch(error => { 
      this.zone.run(() => { 
      observer.error(error); 
     }); 
    }); 
}); 

認証コールバックのために同じことをしたこの

tagsRef.on('value', snapshot => { 
    this.zone.run(() => { 
     const tags = Object.keys(snapshot.val() || {}); 
     observer.next(tags); 
    }); 
});  

ようNgZone内のすべてのfirebaseのコールバックを実行することにしました。これは私のために問題を解決しました。

この問題は、認証のリダイレクト後にのみ発生する理由はわかりません。

EDIT#1:

が、私はもう少しこのに見えた、と明らかにリダイレクト後firebase認証コールバックがangularゾーンの代わりに、<root>ゾーンで実行します。そのため、変更の検出がトリガーされない理由が説明されています。

編集#2: 次のコミットでは、angfire2のレポは、firetbaseが、angleゾーンが存在する前にwebsocketリスナーを追加できることを示しています。だから、angularゾーンの代わりに<root>ゾーンで実行される認証コールバックを見ているのはその理由だと思います。

Firebaseは、角度ゾーンが存在する前に、データが受信されるすべてのコールバックは、角の ゾーンの外側で実行されている 、WebSocketのリスナーを追加し、変更検出を

https://github.com/angular/angularfire2/pull/648/commits/8b2c7a400418a68b6f25654067ce6cf918ceb681

+0

それは私だけではないことが分かりました。ありがとう! – JohnL4

関連する問題