Как мне остановить setInterval в Angular - PullRequest
1 голос
/ 17 апреля 2020

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

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 => {
                    this.checkBoxValues.forEach((checkbox, index) => {
                        this.interval = interval(1000 * index).subscribe(() => {
                            checkbox.isChecked = true;
                            console.log(index);
                            if (res.id === 1700) {
                                if (index === this.checkBoxValues.length - 1) {
                                    this.status = res.id;
                                    this.dialogProcessing.close();
                                    this.interval.unsubscribe();
                                }
                            } else {
                                const random: number = Math.floor(1 + Math.random() * 4);
                                if (index === random) {
                                    this.dialogProcessing.close();
                                    this.interval.unsubscribe();
                                    this.navigationService.navigateToDeniedPage();
                                }
                            }
                        });
                    });
                },
                () => {
                    this.dialogProcessing.close();
                    this.notificationService.showGetErrorNotification();
                });
    }
}

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Используйте наблюдаемое, чтобы сделать это. Я создал один отсчет для этого в ссылке https://stackblitz.com/edit/angular-gq9zvk

создать свойства

  ispause = new Subject();
  timer: Observable<number>;
  timerObserver: PartialObserver<number>;

для запуска таймера

  this.timer.subscribe(this.timerObserver); 

для создания таймера

this.timer = interval(1000)
      .pipe(
        takeUntil(this.ispause) // take until used to stop it
      );

    this.timerObserver = {

      next: (_: number) => {  
         //u cann call function here      
      }
    };

до остановки this.ispause.next();

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

Я бы предложил использовать clearInterval для остановки setinterval

Пожалуйста, ознакомьтесь со следующими инструкциями по реализации

Как использовать clearInterval () в Angular 4

...