Я пытаюсь смоделировать момент ожидания, когда пользователь должен ждать (в настоящий момент имитируется) внутреннего вызова. Когда появляется момент ожидания, я хочу, чтобы кнопки были отключены, и чтобы было показано сообщение. Я пытаюсь добиться этого с помощью следующего кода.
При нажатии кнопки этот фрагмент кода выполняется в службе:
//Simulate waiting for backend
this.calculatingObserver.next(true);
console.log("disabled");
await (new Promise(resolve => setTimeout(resolve, 2000)));
this.calculatingObserver.next(false);
console.log("enabled");
Это выполняется, когда я вижу журналы консолипоявляются.
Это подпись наблюдателя:
private calculatingObserver: Observer<boolean> = null;
И вот как я получаю наблюдаемое для него:
public get Calculating$(): Observable<boolean> {
return new Observable((calculatingObserver: Observer<boolean>) => {
this.calculatingObserver = calculatingObserver;
});
}
В моем компоненте я портирую этонаблюдаемый для нового свойства
//In the component class
Calculating$: Observable<boolean>;
//in ngOnInit
this.Calculating$ = this._calculateService.Calculating$;
И в HTML-коде компонента я использую для проверки следующее свойство:
Calculating: {{Calculating$ | async}}
Когда я тестирую код, изначально вычисление неset (пустая строка). Когда я нажимаю кнопку, я вижу, что Калькуляция меняется на true. Но тогда оно никогда не меняется на ложное. Таким образом, кажется, что во время выполнения
this.calculatingObserver.next(false);
что-то идет не так, и я не могу понять, почему. Что я делаю не так, и почему вычисление не меняется на ложное?
Время ожидания работает, так как требуется 2 секунды, прежде чем в консоли будет напечатано «включено».