如何在 Angular 2 中将多个 Observable 组合在一起
How to combine multiple Observables together in Angular 2
所以我刚刚开始使用 Angular2 进行编程,并且刚刚开始学习订阅、主题和行为主题。目前我有多个订阅来获取存储在我的服务中并发送到组件的值。我的应用程序可以正常工作,但我知道它效率很低。它在我的组件中失控了:
this.threatService.minLimitChange$.subscribe( min => { this.min = min; this.getSession();});
this.threatService.maxLimitChange$.subscribe( max => { this.max = max; this.getSession();});
(和另外 5 个一样,每次获取单个值并调用函数 getSession())
在我的threat.service中:
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() 所需的所有值,运行 函数 once。请提供有关如何使用 concat、merge 或 forkJoin 合并我的订阅的任何帮助或解释,我将不胜感激。谢谢!
您可以使用 Observable.combineLatest
将 2 个可观察流合并为一个:
combineObs = obs1.combineLatest(obs2,
(val1, val2) => {
return {val1: val1, val2: val2};
});
正在工作的 plunker:http://plnkr.co/edit/mmCzEmdKexpaWNM53me9?p=preview
所以我刚刚开始使用 Angular2 进行编程,并且刚刚开始学习订阅、主题和行为主题。目前我有多个订阅来获取存储在我的服务中并发送到组件的值。我的应用程序可以正常工作,但我知道它效率很低。它在我的组件中失控了:
this.threatService.minLimitChange$.subscribe( min => { this.min = min; this.getSession();});
this.threatService.maxLimitChange$.subscribe( max => { this.max = max; this.getSession();});
(和另外 5 个一样,每次获取单个值并调用函数 getSession())
在我的threat.service中:
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() 所需的所有值,运行 函数 once。请提供有关如何使用 concat、merge 或 forkJoin 合并我的订阅的任何帮助或解释,我将不胜感激。谢谢!
您可以使用 Observable.combineLatest
将 2 个可观察流合并为一个:
combineObs = obs1.combineLatest(obs2,
(val1, val2) => {
return {val1: val1, val2: val2};
});
正在工作的 plunker:http://plnkr.co/edit/mmCzEmdKexpaWNM53me9?p=preview