Это не так, как работает шаблон Observer, вы должны подписаться на поток данных наблюдателя для получения данных. и вы не можете получить данные, не подписавшись на них!
То есть внутри подписки оператор async
или await
не используется!
в этом сценарии вы можете иметь переменную вне рамок блока и присвоить значение после подписки наблюдателя
export class MyComponent {
dataToPopulate: any = null;
constructor(private service: BlockService) {}
ngOnInit() {
this.service.subscribe(
data => dataToPopulate = {...data}, // for response 200 OK
error => console.log(error), // handle network error here {400 or 500 etc}
() => console.log(this.dataToPopulate) // complete callback hook
)
}
}
Pro tip : отмените подписку на ловушку уничтожения компонента, чтобы избежать утечки памяти
Существует еще один способ конвертировать Observable в Promise toPromise
и использовать операторы async
и await
. Но для сетевых вызовов вам нужно блокировать try
catch
вокруг этих операторов, чтобы обнаружить ответы об ошибках сервиса, такие как 400
или 500