Вы звоните subscribe
по вашему HTTP-вызову в методе getRecipes
.Возвращаемое значение subscribe
имеет тип Subscription
, а не Observable
.Таким образом, вы не можете использовать это значение в вашем storeRecipes
методе, потому что Subscription
не может наблюдаться;может только Observable
.
Более того, ваша логика getRecipes
плохая.Вы используете map
после HTTP-вызова в getRecipes
, однако перед ним стоит точка с запятой.Вы даже выполняли этот код?Это недопустимый TypeScript / Angular / RxJS и не будет компилироваться.
Вы можете либо правильно связать свои операторы (используя старый синтаксис RxJS), либо использовать переносимые операторы , как в моем примере ниже(новый синтаксис RxJS).
Измените вашу getRecipes
функцию на эту, и она должна работать:
getRecipes() {
this.httpClient
.get('https://ng-recipe-book.firebaseio.com/recipes.json')
.pipe(
map((response: Response) => {
const recipes: Recipe[] = response.json();
for (const recipe of recipes) {
if (!recipe['ingredients']) {
recipe['ingredients'] = [];
}
}
return recipes;
}),
tap((recipes: Recipe[]) => {
this.recipeService.setRecipes(recipes);
})
);
}
И убедитесь, что импортировали map
и tap
из rxjs/operators
:
import { map, tap } from 'rxjs/operators';