Angular 2:如何在所有服务准备好后强制运行一个函数?

时间:2017-09-17 12:20:26

标签: angular angular2-services

export class InferencePageComponent implements OnInit {

  constructor(private campaignService: CampaignService) {
    this.campaignService.getStrategy1().subscribe(data => {
      this.Strategy1 = data;
    });
    this.campaignService.getStrategy2().subscribe(data => {
      this.Strategy2 = data;
  });
    this.campaignService.getStrategy3().subscribe(data => {
      this.Strategy3 = data;
    });
  }

我有来自上述服务的3个不同功能的数据。我还有一个函数,它从这3个服务中加载数据并对其进行一些处理。但是在所有这3个服务完全加载后,我无法加载该功能。 什么是正确的方法?

2 个答案:

答案 0 :(得分:0)

您通过 forkJoin 处理它,forkJoin将在所有调用完成后返回数据并返回结果

使用forkJoin处理服务中的所有这些调用,并在组件内部订阅它,一旦获得数据,就可以调用另一个函数。

Merging http observables using forkjoin

这是解决问题的最佳方法,您也可以使用 observable.zip 在您的组件上进行此操作。

答案 1 :(得分:0)

你可以使用Observable.zip(), 以下是可以为您提供帮助的代码段。

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/zip';
// then in your component, do as below :
Observable.zip( 
 this.campaignService.getStrategy1(),
 this.campaignService.getStrategy2(),
 this.campaignService.getStrategy3()
 ).subscribe(([Strategy1Data,Strategy2Data, Strategy3Data])) => {
   this.Strategy1  = Strategy1Data;
   this.Strategy2 = Strategy2Data;
   this.Strategy3 = Strategy3Data;
   this.yourFunctionForExtraProcess();
 }