На самом деле, ваш код неисправен, и речь идет не только о хороших методах программирования.
Вы используете Observable, который делает ваш код асинхронным .Если ваш код асинхронный, он никогда не станет синхронным, и вам придется использовать асинхронные типы до самого последнего потребителя вашей функции.В приложении Angular это обычно Компонент или Директива.
Это основная концепция JavaScript, и она наиболее широко применяется в Observables , Promises и Функции обратного вызова .Очень важно понять, как работает асинхронное выполнение кода и цикл событий JavaScript, чтобы работать с этим языком программирования.
Что касается вашего примера кода, вам нужно изменить тип возвращаемого значения вашей функции на Observable<string>
и передайте наблюдаемое в свой класс компонентов, где вы можете назначить его свойству и позволить Angular обрабатывать все остальное.
Это выглядит так:
private openModal() : Observable<string> {
// some setup code
return this.dialog.open(MyModalComponent, configModal)
.afterClosed();
}
Затем в вашем компоненте ...
private data: string;
clickSomeButton() {
this.openModal().subscribe(data => this.data = data);
}