1

イベントを通知するために、私のangular2アプリでreactivexのサブジェクトを使用しています。

私がそのようなことをするとき:

let subject1 = new Subject<string>();
let subject2 = new Subject<string>();
subject1.subscribe(data=>console.debug(data));        
subject2.subscribe(data=>console.debug(data));        
subject1.next("this is test event1");
subject2.next("this is test event2");

すべて正常に動作しますが、両方のイベントが発生するのを待ってから、いくつかのアクションを実行したいと考えています。Observable.forkJoin を見つけましたが、サブジェクトで動作させることはできません。このようなコードは機能しません

Observable.forkJoin(
           subject1.asObservable(),
           subject2.asObservable()
        ).subscribe(
            data => {
              console.debug("THIS IS MY FJ");
              console.debug(JSON.stringify(data));
            },
            error=>console.error(error),
            ()=>{
              console.info('THIS IS MY FJ SUCCESS');
            }
        );        

この問題について教えてください。

宜しくお願いします クシシュトフ・シェウチク

4

1 に答える 1

2

あなたの場合、zip代わりに演算子を使用する必要があります。このオペレーターは、指定された観測可能なシーケンスをマージしますが、forkJoin1 つはすべての観測可能なシーケンスを並行して実行し、それらの最後の要素を収集します。

したがって、forkJoinオペレーターは、たとえば HTTP オブザーバブルには問題ありませんが、サブジェクトには問題ありません。

これがサンプルです。

export class App {
  subject1: Subject<string> = new Subject();
  subject2: Subject<string> = new Subject();

  constructor() {
    this.subject1.subscribe(data=>console.debug(data));        
    this.subject2.subscribe(data=>console.debug(data));        

    Observable.zip(
      this.subject1,
      this.subject2
    ).subscribe(
      data => {
        console.debug("THIS IS MY FJ");
        console.debug(JSON.stringify(data));
      },
      error=>console.error(error),
      ()=>{
        console.info('THIS IS MY FJ SUCCESS');
      }
  );        
}

test() {
  this.subject1.next("this is test event1");
  this.subject2.next("this is test event2");
}

対応する plunkr を参照してください: https://plnkr.co/edit/X74lViYOgcxzb1AjC9dL?p=preview

于 2016-05-06T10:30:37.850 に答える