Проблема, с которой вы сталкиваетесь, связана с тем, что вы подписываетесь на свой HTTP-запрос в своей службе, но затем возвращаете данные вне этой подписки (когда, скорее всего, запрос еще не был выполнен).
Я бы написал так:
public getStocks(): Observable<Quote[]> {
return this.http.get<Quote>("https://api.iextrading.com/1.0/stock/market/batch?symbols=AABA,AAPL,ABBV&types=quote")
.pipe(map(data => {
for (var key in data) {
if (data.hasOwnProperty(key)) {
this.quote.push(data[key]["quote"]);
}
}
return this.quote;
}));
}
Здесь мы делаем запрос, используем pipe
и map
для преобразования ваших данных так, как вы хотите, но на самом деле не подписывайтесьдля него это будет работа компонента / источника данных.Мы просто возвращаем это Observable
и все готово.
Также в вашем ngOnInit
вы делаете аналогичную ошибку снова, вы подписываетесь на Observable
и не ожидаете ответа, который выпытаемся записать возвращаемое значение, оно должно выглядеть следующим образом:
ngOnInit() {
this.stocksummary.getStocks().subscribe(t => {
this.quote = t;
console.log(this.quote);
});
}
Здесь - это рабочий стек, который показывает рабочую версию вашего кода.