#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