5

所以我刚刚开始使用 Angular 2 进行编程,并且刚刚开始学习订阅、Subject 和 BehaviorSubject。目前我有多个订阅来获取存储在我的服务中并发送到组件的值。我的应用程序有效,但我知道它的效率很低。它在我的组件中已经失控:

this.threatService.minLimitChange$.subscribe( min => { this.min = min; this.getSession();});
this.threatService.maxLimitChange$.subscribe( max => { this.max = max; this.getSession();});

(和其他 5 个获得单个值并每次调用函数 getSession() 一样)

在我的威胁服务中:

private minLimitChangeSource = new BehaviorSubject<number>(this.min);
private maxLimitChangeSource = new BehaviorSubject<number>(this.max);
minLimitChange$ = this.minLimitChangeSource.asObservable();
maxLimitChange$ = this.maxLimitChangeSource.asObservable();

所以我试过:

this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$).subscribe( res => console.log(res));

我的目标只是测试 res 是什么,因为我不确定如何访问这两个值......但我在控制台中得到了这个。;/

TypeError: this.threatService.minLimitChange$.merge is not a function. (In 'this.threatService.minLimitChange$.concat(this.threatService.maxLimitChange$)', 'this.threatService.minLimitChange$.concat' is undefined)

最终,我想从我的服务中获取 getSession() 需要的所有值并运行该函数一次。我非常感谢任何有关如何使用 concat、merge 或 forkJoin 来合并我的订阅的帮助或解释。谢谢!

4

1 回答 1

11

您可以使用Observable.combineLatest将 2 个可观察流合并为一个:

combineObs = obs1.combineLatest(obs2, 
  (val1, val2) => { 
    return {val1: val1, val2: val2};
  });

工作插件:http://plnkr.co/edit/mmCzEmdK​​expaWNM53me9?p= preview

于 2016-07-14T03:53:45.550 回答