2016-08-02 2 views
0

ストリーム(たとえば、StreamA)がnull以外の値を返してから、StreamB subscribe関数を呼び出すのを待つ方法を教えてください。私は特にStreamAの値に興味がありません。次に、StreamBの値をStreamAがnull以外の値を返す前に更新されている可能性があり、新しいイベントがない可能性があります。別のストリームを呼び出す前にストリームを待つ

ポーズブルを試してみましたが、これを見て:RxJS: How can I do an "if" with Observables?、残念ながらうまく動作しませんでした。これは、エクスポートされたクラスpausable、rxjs v 5.0.0-beta.6が存在しないためです。

これは、回答ごとに私が思い付いたところです。

エクスポートクラスAuthService { userModel:FirebaseListObservable = this.af.database.list(/users); コンストラクタ(プライベートAF:AngularFire){

var user = this.currentAuthor(); 
    var userStream = user; 

    this.af.auth.flatMap((d) => { console.log(d);return this.userModel.publishReplay(1); }); 

    this.userModel 
     .subscribe((data) => { 
     var flag = false; 
     data.forEach((item) => { 
      if (item.$key && item.$key === user.uid) { 
      flag = true; 
      return; 
      } 
     }); 

     if (flag) { 
      console.log('hello'); 
     } else { 
      this.userModel.push({ 
       firstName: user.auth.displayName.substr(0, user.auth.displayName.lastIndexOf(' ')), 
       lastName: user.auth.displayName.substr(user.auth.displayName.lastIndexOf(' '), user.auth.displayName.length), 
       displayPic: user.auth.photoURL, 
       provider: user.provider, 
       uid: user.uid 
      } 
     ); 
     } 
     }) 
    } 
    public currentAuthor():FirebaseAuthState { 
    return this.af.auth.getAuth(); 
    } 

希望、私は自分自身を明確にすることができます。今でも私は混乱しています。 :p。

rxjsとリアクティブプログラミングの初心者です。そして、どんな助けもありがとう。

そして、btw、立ち寄ってくれてありがとう。 :)

答えて

1

私はplausibleであなたはpausableを意味すると思いますか?私はあなたがここで達成しようとしていることを正確にはわかりません(コントロールフロー?)。ただし、streamAが値を生成した後にstreamB値を使用する場合は、flatMapを使用できます。いつでもstreamA発し、streamBによってその時間後に放出された値は、あなたを与える必要があり

streamA.flatMapLatest(function (_){return streamB})

。あなたはその時間前に放出された最後の1件のBなどの値が必要な場合

、あなたはstreamBB = streamB.publishReplay(1)

streamA.flatMapLatest(function (_){return streamBB})

がそれをテストしていない使用するので、それが動作するかどうか、私は最新の状態に保つことができます。

+0

私はコードを追加して、物事を少し明確にしました。 (ホープが助けてくれる)。また、上記のコードでは、TSコンパイラで次のエラーが発生しています。 'プロパティ 'publishReplay'がタイプ 'FirebaseListObservable 'に存在しません。 – ankitjain11

+0

あなたのタイプを調べる必要があります。 'flatMapLatest'では、それが返されるobservableであることがわかります。だから、 'FirebaseListObservable'が確かに観測可能であることを確認してください。 'publishReplay'は' http:// reactx.io/rxjs/class/es6/Observable.js〜Observable.html'にありますので、Rxjs v5の一部になるはずです。 – user3743222

+1

'flatMapLatest'はRxJS 5の' switchMap'でなければなりません – subhaze

関連する問題