метод машинописного текста, возвращающий неопределенный? - PullRequest
0 голосов
/ 18 апреля 2019

Привет, у меня есть 5 угловых приложений. У меня есть метод обслуживания, который возвращает неопределенный. вот что я пытаюсь сделать. У меня есть функция с именем cloneFlight. я звоню на flightService.getCampaignsToClone (this.flight), который возвращает значение undefined.

cloneFlight() {
    combineLatest(
      this.translateService.get('CONFIRM.CLONE_FLIGHT', { item: this.flight.name}),
      this.flightsService.getCampaignsToClone(this.flight)
    ).subscribe( ([header, campaigns]) => { 
      this.cloneFlightService.openModal(header,this.flight,campaigns);
    });
  }

код для getCampaignsToClone выглядит следующим образом.

 getCampaignsToClone(flight: Flight){

    let campaignStatusesIdArr: string[];
    let campaigns: CampaignUnpaginated[] ; 
    this.campaignService.getStatuses().subscribe(
      (data) => { 
        campaignStatusesIdArr = data.filter( x => x.code === (CampaignStatusCode.IN_PROGRESS || 
          CampaignStatusCode.READY)).map( y => y.id);
      }
    );
    let accountId: string = flight.campaign.account.id;    

    this.campaignService.getUnpaginatedCampaigns(
      {
        statuses: campaignStatusesIdArr,
        accounts: accountId
      }
    ).subscribe(data=>{
      console.log(data);
      campaigns = data;
    });
    return Observable.of(campaigns);
  }

в getCampaignsToClone я делаю http-вызов campaignService.getStatuses (), который возвращает Observable. затем отфильтровывая некоторые из них, а затем я звоню getUnpaginatedCampaigns, который является еще одним http-вызовом. anyidea, каков наилучший способ написать этот код, чтобы метод не возвращал undefined. Я думаю, что я, вероятно, не использую операторы rxjs. может кто-нибудь помочь мне разобраться.

Большое спасибо

1 Ответ

1 голос
/ 18 апреля 2019

Перепишите ваш метод getCampaignsToClone, чтобы он возвращал наблюдаемую последовательность.Используйте flatMap, чтобы подписаться на getUnpaginatedCampaigns, наблюдаемый по очереди.

getCampaignsToClone(flight: Flight): Observable<CampaignUnpaginated[]> {
 return this.campaignService.getStatuses().pipe(
    map(data => data.filter( x => x.code === (CampaignStatusCode.IN_PROGRESS || CampaignStatusCode.READY)).map(x => x.id)),
    flatMap(ids => this.campaignService.getUnpaginatedCampaigns({
        statuses: ids,
        accounts: flight.campaign.account.id,
    }))
  );
}
...