Как использовать pipe и map в Rxjs - PullRequest
0 голосов
/ 05 марта 2020

У меня есть следующий метод:

 return this.http.get<any>(this.getUrl.testAPI).pipe(
  map(data => {
    return data.metrics.find(obj => {
      return (
        obj.metricName === 'PAY_EQUITY_CUSTOM' ||
        obj.metricName === 'metric.' + obj.itemID + '.name'
      );
    });
  }),
  map(obj => {
    return obj && obj.itemID;
  }),
  catchError((error: any) => throwError(error))
);

Здесь мои бизнес логики c изменились таким образом, что

  if (obj.metricName === 'PAY_EQUITY_CUSTOM') then I should return obj.itemId

  if (obj.metricName === 'PAY_EQUITY_SETTINGS') then I should return obj.settings

Я изменил следующим образом:

 let toReturnObj = { 'settings': {}, 'itemId': ''};
  return this.http.get<any>(this.payEquitySummaryUrls.payEquityMetaApi).pipe(
  map(data =>{
    data.metrics.filter(obj => {
      if (obj.metricName === 'PAY_EQUITY_CUSTOM' || obj.metricName === 'metric.' + obj.itemID + '.name') {
        toReturnObj.itemId = obj.itemId;
      } else if (obj.metricName === 'PAY_EQUITY_SETTINGS') {
        toReturnObj.itemId = obj;
      }
    });
    return toReturnObj;
  }),
  catchError((error: any) => throwError(error))
);

Но я не хочу делать это подобно первому способу, который у меня есть, может кто-нибудь предложить мне сделать это более подходящим способом. Спасибо.

...