Как вернуть данные из forkJoin - PullRequest
0 голосов
/ 04 октября 2019

Я новичок в rxjs, и у меня возникла проблема с использованием forkJoin.

У меня есть служба angular, которая запрашивает данные у двух других служб angular и возвращает эти объединенные данные компоненту.

Но когда я вызываю эту службу, используя следующий фрагмент кода в моем угловом компоненте, я не получаю все данные:

this.timeseriesKpiData = this.timeseriesKpiDataService
      .getLatestTimeseriesKpi(this.assetId, this.aspectName, this.variableName,

Вот метод, который я вызываю в моей службе:

timeseriesKpiDataService.ts:

 public getLatestTimeseriesKpi(
    assetId: string,
    aspectName: string,
    variableName: string
  ): any {

    const timeseriesKpiData = {
      name: '',
      value: 'no value found',
      unit: '',
      properties: [
        {
          name: 'Asset',
          value: 'Unknown Asset'
        }
      ]
    };

    // set variableName and aspectName
    timeseriesKpiData.name = variableName;
    timeseriesKpiData.properties.concat( {
      name: 'Aspect',
      value: aspectName} );

    forkJoin (
      // get latest timeseries from another service
      this.timeseriesService.getLatestTimeseriesValue(assetId, aspectName)
        .pipe(
          map((latestTimeseries: Timeseries) => {
            return latestTimeseries;
          }
        )),

      // get unit
      this.aspectService.getUnit(assetId, aspectName)
        .pipe(
          map((unit: any) => {
            return unit;
          })
      )).subscribe(([latestTimeseries, unit]) => {
        if (latestTimeseries !== undefined) {

          // set value
          timeseriesKpiData.value = latestTimeseries[timeseriesKpiData.name];

          // set unit
          timeseriesKpiData.unit = unit;
       }
      }
      });  // end of forkjoin

      return timeseriesKpiData; // how to return it?
    }

Я думаю, что проблема заключается в развороте соединения, и он все еще работает, когда я возвращаю свои данные в компонент, и, таким образом, я не получаю все необходимые данные (timeseriesKpiData.value не задано).

Итак, мой вопрос: как я могу вернуть данные из forkjoin или как-то дождаться окончания forkjoin, прежде чем я верну данные в свой компонент?

1 Ответ

0 голосов
/ 04 октября 2019

вы должны вернуть forkjoin вместо этого, чтобы ваш код выглядел как

public getLatestTimeseriesKpi(
    assetId: string,
    aspectName: string,
    variableName: string
  ): any {

    const timeseriesKpiData = {
      name: '',
      value: 'no value found',
      unit: '',
      properties: [
        {
          name: 'Asset',
          value: 'Unknown Asset'
        }
      ]
    };

    // set variableName and aspectName
    timeseriesKpiData.name = variableName;
    timeseriesKpiData.properties.concat( {
      name: 'Aspect',
      value: aspectName} );

   return forkJoin (
      // get latest timeseries from another service
      this.timeseriesService.getLatestTimeseriesValue(assetId, aspectName),

      // get unit
      this.aspectService.getUnit(assetId, aspectName));  // end of forkjoin
    }

, тогда в вашем компоненте

this.timeseriesKpiDataService
      .getLatestTimeseriesKpi(this.assetId, this.aspectName, this.variableName).subscribe(([latestTimeseries, unit]) => {
        if (latestTimeseries !== undefined) {
         this.timeseriesKpiData:any ={};
          // set value
          this.timeseriesKpiData.value = latestTimeseries[timeseriesKpiData.name];

          // set unit
          this.timeseriesKpiData.unit = unit;

       }
      }
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...