Вызов функции после setInterval - PullRequest
1 голос
/ 08 апреля 2020

У меня есть кнопка отправки, после нажатия которой появляется всплывающее окно. Всплывающее окно содержит список флажков, которые должны быть проверены, если ответ сервера будет 1700 и после этого всплывающее окно должно быть закрыто. Но вызов закрывающейся всплывающей функции вызывается до того, как setInterval будет завершен.

publi c sendApplication (): void {if (this.formService.isFormValid (this.formGroup)) {

    this.dialogProcessing
        = this.dialog.open(FoDialogBankVerificationComponent, {
        width: '500px',
        disableClose: true,
        data: this.checkBoxValues,
    });
    this.submit()
        .pipe(
            take(1))
        .subscribe(res => {
            if (res.id === 1700) {
                this.checkBoxValues.forEach((el, index) => {
                    setInterval(() => {
                        el.isChecked = true;
                    }, index * 1500);
                });
                this.status = res.id;
                this.dialogProcessing.close();
            }
        });
}

}

1 Ответ

2 голосов
/ 08 апреля 2020

асинхронное программирование означает параллельное программирование, когда единица работы выполняется отдельно от другой.

в вашем случае this.status = res.id; и this.dialogProcessing.close(); не будут ожидать конца forEach оператор.

как решить эту проблему => Например, вы можете переместить два влияния в setInterval blo c и проверить, является ли последний индекс для их выполнения

Примерно так:

    if (res.id === 1700) {
                    this.checkBoxValues.forEach((el, index) => {
                        setInterval(() => {
                            el.isChecked = true;
                            if(index=== this.checkBoxValues.length - 1){
                               this.status = res.id;
                               this.dialogProcessing.close();
                            }
                        }, index * 1500);
                    });

    }
...