如何将Observable的forkJoin与自己的事件一起使用



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

你能帮我解决这个问题吗。

致以最诚挚的问候Krzysztof Szewczyk

在您的情况下,您需要使用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.

最新更新