Да, это происходит потому, что функция, переданная в subscribe
, не вызывается до того, как вы вернете список products
.
Рассмотрим более простой пример:
function f() {
let flag: boolean = false;
setTimeout(() => flag = true, 10);
return flag;
}
С setTimeout
вы ставите новую задачу в цикл обработки событий JavaScript , как и с http.get
.Задачи в цикле событий всегда выполняются после Функция, которая их туда возвращает, возвращает.В моем примере возвращаемое значение всегда будет false
, независимо от того, насколько мал время ожидания.
Возвращаясь к вашему примеру, вам нужно вернуть Observable
из вашей функции.Вместо того, чтобы пытаться присвоить возвращаемое значение вызова GET локальной переменной products
, вы напрямую возвращаете вызов GET.Вот так:
getProducts(): Observable<IProduct[]> {
// your get call ...
return productsObservable;
}
Теперь это, вероятно, не решит все за вас, потому что теперь вам нужно иметь дело с Observable
в ваших функциях потребителя.Но это более или менее важно для всей модели Observable ... чтобы уведомить конечного потребителя об изменениях данных.
В Angular вы можете работать с Observables , используя асинхронную трубу .