所有服务呼叫完成后,触发方法



我有一个组件,可以对服务进行两个调用以获取2组数据。

我希望我的组件根据逻辑显示数据,该逻辑需要两个调用的数据。

当两个服务请求返回可观察的方法时,如何制作处理数据触发的方法?

这是我到目前为止所拥有的:

ngOnInit(): void {
    //get message contents
    this._pageSpeedService.getMessageData()
            .subscribe(results => this.messageData = <TestResultMessageLogic[]>results,
                       error => this.errorMessage = <any>error);
    //get data to show what messages to show
    this._pageSpeedService.getResults(this.testUrl)
            .subscribe(results => this.testResults = results,
                       error => this.errorMessage = <any>error);
}
processApiRespone(testResults: IPageSpeedResult, messageData: TestResultMessageLogic[]): void{
    this.testResults = testResults;
    this.alerts = [];
    for(let testLogic of messageData)
    {
        // .. logic is here, omitted for brevity
        this.alerts.concat(builtData);
    }

所以当我有this.messageData&amp;this.testResults带有返回数据,然后我需要运行processApiRespone()才能创建我在视图模板中迭代的this.alerts

我应该用什么机制来执行此操作?

,如果您必须观察到只发出单个结果(例如,http呼叫)

,则可以使用forkJoin操作员
Observable.forkJoin(this._pageSpeedService.getMessageData, 
                    this._pageSpeedService.getResults(this.testUrl))
     .subscribe(result => {
             this.messageData = result[0];
             this.testResults = result[1];
             //now process the response
             this.processApiResponse(this.testResults, this.messageData);
      });

加载页面时,我们已经在项目中使用了此内容来等待许多HTTP调用(显示旋转器/加载UI)。

请参阅此处以获取运算符文档。

类似于forkjoin,您也可以使用observable.combinelatest。

导入:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/combineLatest';

并使用操作员:

Observable.combineLatest(this._pageSpeedService.getMessageData, 
                    this._pageSpeedService.getResults(this.testUrl))
     .subscribe(result => {
             this.messageData = result[0];
             this.testResults = result[1];
             //now process the response
             this.processApiResponse(this.testResults, this.messageData);
      });

observable.combineLatest需要两个或多个源可观察物,并且当所有观察到至少发出一个值时,将发出其第一个值。发射的组合值是从每个源可观察物发出的所有最后一个值的数组。

请参阅CombineLatest的RXJS文档

在您处理单个发出的可观察物的示例中,两个操作员之间没有很大的区别,但是CombineLatest似乎作为一个方便的操作员可以在您的口袋中使用。

最新更新