Журнал консоли работает после setInterval - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть массив объектов, я должен установить для свойства isChecked значение true для первых элементов дерева массива. После того, как индекс массива равен 3, я должен перенаправить на другую страницу, но журнал консоли все еще работает

public 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((checkbox, index) => {
                        setInterval(() => {
                            checkbox.isChecked = true;
                            if (index === this.checkBoxValues.length - 1) {
                                this.status = res.id;
                                this.dialogProcessing.close();
                            }
                        }, index * 1000);
                    });
                } else {
                    this.checkBoxValues.forEach((checkbox, index) => {
                        setInterval(() => {
                            console.log(index)
                            if (index !== 3) {
                                checkbox.isChecked = true;
                            } else {
                                this.dialogProcessing.close();
                                this.navigationService.navigateToDeniedPage();
                            }
                        }, index * 1000);
                    });
                }
            });
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

Это происходит потому, что вы не очищаете интервал, чтобы сделать это,

Сначала объявите переменную наподобие

interval:any;

Затем присвойте setInterval вот так и используйте его для выполнения Также clearInterval,

this.interval = setInterval(() => {
   checkbox.isChecked = true;
   if (index === this.checkBoxValues.length - 1) {
       this.status = res.id;
       clearInterval(this.interval); 
       this.dialogProcessing.close();
   }
 }, index * 1000);

Точно так же вы должны очистить и другие интервалы, когда они вам больше не нужны.

Дайте мне знать, если это так не решить вашу проблему

...