Вы пытаетесь синхронно унаследовать асинхронное значение invoicesSumTotalValue, вот в чем проблема.
Переместите переменную уровня метода invoicesSumTotalValue на уровень класса и напечатайте значение в шаблоне HTML, чтобы получить фактическое общее значение.
Поскольку служба http возвращает наблюдаемые значения цен, она не будет сразу же доступна, когда вы выполняете console.log.
Измените код, как показано ниже, и он будет работать нормально: (для удобства я высмеивал массив prod, чтобы показать результат здесь)
Код компонента:
класс экспорта ExchangeComponent реализует OnInit {
invoicesSumTotalValue = 0;
constructor(private exchangeService: ExchangeService) { }
ngOnInit() {
this.calcInvTotalValue();
}
calcInvTotalValue() {
let prods = [
{
price: 10,
currency: 'INR'
},
{
price: 20,
currency: 'EUR'
}
];
prods.forEach(c => {
let price = c['price'];
let currency = c['currency'];
this.exchangeService.getExchangeRate("USD", currency).subscribe(
vl => {
let exRate = vl['rates'][currency];
this.invoicesSumTotalValue = this.invoicesSumTotalValue + (parseFloat(String(price)) * parseFloat(exRate));
},
(error: any) => console.log(error)
);
});
}
}
Код шаблона:
{{invoicesSumTotalValue}}