Я не могу получить доступ к переменным, заполненным через httpclient observable subscription

#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) в свой канал, чтобы выдать только одно значение и завершить наблюдаемое.