2016-05-06 47 views
1

使用我的angular2應用程序中的reactivex主題來發信號事件。如何在自己的事件中使用Obrovable的frokJoin

當我做這樣的事情:

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'); 
      } 
     );   

請你幫我解決這個問題。

問候 剋日什托夫·Szewczyk

+0

是否有錯誤? – echonax

+0

@echonax不,沒什麼,只是subscribe方法onNext永遠不會被調用 –

+0

順便說一句,它不起作用,因爲你需要調用'Subject'上的'complete'來從'forkJoin' – paulpdaniels

回答

2

在你的情況,你需要使用zip操盤手。此運算符將合併指定的可觀察序列,而forkJoin則並行運行所有可觀察序列並收集它們的最後一個元素。

因此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

相關問題