Временной интервал, не существующий после желаемого ответа, он ожидает завершения всего интервала

#javascript #typescript #rxjs #setinterval

#язык JavaScript #машинописный текст #rxjs #сетинтервал

Вопрос:

Путем передачи идентификатора в течение 60 секунд в качестве полезной нагрузки в API для получения статуса транзакции. API будет выдавать статусы «Прогресс», «Завершено» и «Не выполнено». Если ответ «Прогресс», он должен запустить таймер до «Успеха» / «Сбоя» и должен выйти из таймера.

1. Проблемы прямо сейчас заключаются в том, что даже если API даст «Успех» / «Сбой», он не выйдет из таймера, который он продолжает загружать в течение одной минуты.

2. Если API потерпит неудачу, он будет находиться в бесконечном цикле.

Я попытался добавить маршрутизацию после ответа «Успех» / «Сбой», для этого также требуется 60 С.

 intervalVal=interval(50000)  checkstatus(id) {  this.timeInterval = this.intervalVal.subscribe(() =gt; {  this.transactionstat(id).subscribe((statres: any) =gt; {  switch (statres.status) {  case "progress":  this.stepper.selectedIndex = 0;  case "Sucess":  this.steppershow = false;  this.stepper.selectedIndex = 1;  this.stepper.selectedIndex = 2;  this.timeInterval.unsubscribe()  setTimeout(() =gt; {  this.router.navigateByUrl("/home");  }, 3000);  break;  case "Failed":  this.stepper.selectedIndex = 1;  this.stepper.selectedIndex = 3;  this.timeInterval.unsubscribe()  setTimeout(() =gt; {  this.router.navigateByUrl("/home");  }, 3000);  break;  }  })  }); } 

Мое требование состоит в том, чтобы выйти из таймера после желаемого ответа, чтобы не ждать всю одну минуту, и выйти из таймера через одну минуту. Помогите с вашими ценными предложениями.

Комментарии:

1. Не подписывайтесь на внутренние наблюдаемые сами. Объедините их с помощью труб и операторов карты (переключение/слияние/выпуск/объединение). Во внешнем наблюдаемом вы можете использовать операторы, такие как take(1), которые автоматически отменят подписку после того, как будет выдано значение 1