#angular-httpclient #angular2-observables #angular10
#angular-httpclient #angular2-наблюдаемые #угловой 10
Вопрос:
Я пытаюсь использовать httpclient, но как только я подписался на сервис и получаю правильные значения, я не могу получить доступ к переменной, в которой у меня есть значения
proyecto: Proyecto;
constructor(
private route: ActivatedRoute,
private service: ProyectoService
) { }
ngOnInit(): void {
this.route.params.subscribe(params => {
const id = params['id'];
this.service.getDatosProyectoCabecera(id)
.subscribe(
(data: Proyecto) => this.proyecto = data,
(err: any) => console.log(err),
() => console.log('Recogidos los datos del proyecto para la cabecera')
);
console.log(this.proyecto);
этот последний console.log выводит «не определено».
Как я могу использовать this.proyecto для решения любых проблем?
Спасибо
Ответ №1:
Не вызывайте subscribe внутри subscribe, это анти-шаблон. Вместо этого используйте более высокую наблюдаемую:
ngOnInit(): void {
this.route.params.pipe(
mergeMap(params => {
const id = params['id'];
return this.service.getDatosProyectoCabecera(id)
})
).subscribe(
(data: Proyecto) => this.proyecto = data,
(err: any) => console.log(err),
() => console.log('Recogidos los datos del proyecto para la cabecera')
);
}
Что вы имеете в виду по этому поводу?
этот последний console.log выводит «не определено».
Я вижу только два console.log. Тот, который должен печатать, если есть ошибка, и один, когда ваш observable завершается. В этом случае, чтобы убедиться, что ваше наблюдаемое завершено, вы можете добавить take(1)
в свой канал, чтобы выдать только одно значение и завершить наблюдаемое.