В моем приложении есть индикатор выполнения, который обновляется с помощью цикла while. Я могу успешно изменить значение прогресса обновления для каждого цикла, но представление обновляется только после завершения всего цикла while. Есть ли способ добавить что-нибудь в цикл while, например ForceViewUpdate () в каждый цикл, или что-то в этом роде?
Посмотрите мой пример здесь и откройте консоль, чтобы увидеть обновляемые значения: https://stackblitz.com/edit/angular-5zlja4?file=app%2Fapp.component.ts



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Способ ожидания блокирует весь поток jsvascript. Javascript работает в одном потоке, если вы заблокируете этот поток, выполняющий цикл while, вы не позволите выполнить какой-либо другой код, включая обновления пользовательского интерфейса. Вы должны использовать setTimeout для запуска кода через некоторое время, или вы можете использовать aync/await и Promises, чтобы придать вашему коду более последовательное ощущение:
export class AppComponent {
sStatus = "Inactive";
iProgressMax = 100;
iProgressValue = 0;
async Run() {
this.sStatus = "Running...";
while (this.iProgressValue < this.iProgressMax) {
await this.wait(1000);
this.iProgressValue = this.iProgressValue + 20;
console.info(this.iProgressValue);
}
this.sStatus = "Complete";
}
wait(ms: number) {
return new Promise((resolve)=> {
setTimeout(resolve, ms);
});
}
}
@Frank я стараюсь :)
Спасибо! Люблю получать идеальный ответ сразу :)