【问题标题】:How to use forkJoin of Observable with own event如何将 Observable 的 forkJoin 与自己的事件一起使用
【发布时间】:2016-05-06 10:13:51
【问题描述】:

我在我的 angular2 应用程序中使用响应式主题来表示事件。

当我这样做时:

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

【问题讨论】:

  • 有错误吗?
  • @echonax 不,没什么,只是订阅方法 onNext 永远不会被调用
  • 顺便说一句,它不起作用,因为您需要在Subjects 上调用complete 以从forkJoin 获得发射

标签: typescript angular rxjs reactivex


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2019-01-23
    • 2016-11-15
    • 2011-03-01
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多