У меня есть набор данных транзакций, который я хотел бы дополнить дополнительными данными, такими как обменный курс на указанную дату, и опубликовать их прямо в моем API.
Но я получаю только свои оригинальные транзакции без каких-либо изменений, и я все еще новичок в Angular и Rxjs. Так что я мог бы помочь с операторами.
У меня есть кнопка, которая вызывает несколько API из функции:
// component.ts
public click() {
this.deposits = this.depositApi.getAllDeposits()
.subscribe(
result => {
result.map(x => this.depositApi.enrichAndSaveDeposit(x));
}
);
}
Получить все необработанные транзакции из локальных API, у которых есть даты. (Это работает)
// depositApiService
public getAllDeposits(): Observable<DepositModel[]> {
return this.http.get<DepositModel[]>(AppConfig.localJsonServerUrl + AppConfig.api.deposits)
.pipe(
catchError(this.handleError('getAllDeposits', null))
);
}
Здесь я вызываю внешний API, чтобы получить обменный курс на данную дату, а затем делаю некоторые вычисления и отправляю его обратно в локальный API.
Но он никогда не попадает в часть mergeMap.
// depositApiService
public enrichAndSaveDeposit(deposit: DepositModel): Observable<DepositModel> {
return this.apiService.getHistoricEurRate(deposit.date)
.pipe(
mergeMap(data => {
deposit.historicExchangeRate = data.rates.USD;
deposit.exchangeRate = deposit.sellAmount / deposit.buyAmount;
deposit.sellAmountInUsd = deposit.sellAmount * data.rates.USD;
deposit.exchangeRateInUsd = deposit.exchangeRate * data.rates.USD;
return this.saveLocalDeposit(deposit);
}), catchError(this.handleError('enrichAndSaveLocalDeposit', deposit))
);
}
Здесь называется внешний API (это работает).
// apiService
public getRemoteExchangeRates(): Observable<ExchangeRateModel> {
return this.http.get<ExchangeRateModel>(AppConfig.exchangeRateApi + '/latest')
.pipe(
catchError(this.handleError('getRemoteExchangeRates', null))
);
}
Это сообщение для местного API. (Никогда не доходит до этой точки)
// depositApiService
private saveLocalDeposit(deposit: DepositModel): Observable<DepositModel> {
return this.http.post<DepositModel>
(
AppConfig.localJsonServerUrl + AppConfig.api.deposits,
deposit,
{ headers: new HttpHeaders().set('Accept', 'application/json') }
)
.pipe(
catchError(this.handleError('saveLocalDeposit', deposit))
);
}