Как отобразить ошибку на странице после истечения времени ожидания отправленной формы?

#angular #typescript

#angular #typescript

Вопрос:

Я работаю над угловой формой, которая отправляет данные в мою серверную службу rest, написанную с использованием Spring Boot. Мне нужно добавить функцию, которая отображает ошибку в случае сбоя при отправке данных по истечении определенного промежутка времени. В настоящее время страница, на которой есть форма, продолжает загружаться вечно, и в форме не отображается ошибка. Я хочу использовать функцию тайм-аутов для Rxjs, но я не знаю, как ее реализовать.

Мой фрагмент кода для отправки конкретной формы выглядит следующим образом:

 this.apiService.afisEnroll(applicant).subscribe(data => {
  if (data.response_code == 210) {
    this.blockUI.stop();
    console.log(`applicant %s enrolled successfully`, applicant.pbuNo);
    var obj = JSON.stringify(this.applicants[this.applicants.length - 1]);
    if (obj == JSON.stringify(applicant)) {
      console.log("this is the last applicant");
      this.captureEnrollmentDetailsForCOMPAS();
    }
  }
  else {
    this.blockUI.stop();
    return this.toast.error("Applicant is already enrolled");
  }
},
  (err) => {
    console.error(err);
    this.blockUI.stop();
    return this.toast.error("error enrolling applicant");
  });
  

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

1. Добро пожаловать codeslayer, я думаю, стоит проверить пример тайм-аута rxjs, это вам поможет learnrxjs.io/operators/utility/timeout.html

2. @HassanSiddiqui Я это видел. Как мне реализовать это в моем текущем фрагменте кода? Нужно ли использовать весь блок кода?

3. @codeslayer Я обновил код здесь, пожалуйста, проверьте и дайте мне знать, это то, что вы хотите: stackblitz.com/edit/angular-t6z13c-tqrjgi

Ответ №1:

Создайте переменный тип bolean, изначально присвоив ему значение false, например, var codeExecute =false; вы все работаете в

    setTimeout(function() {
    this.apiService.afisEnroll(applicant).subscribe(data => {
        if (data.response_code == 210) {
            codeExecute =true;  // addition code
             this.blockUI.stop();
            console.log(`applicant %s enrolled successfully`,applicant.pbuNo);
            if 
                (JSON.stringify(this.applicants[this.applicants.length - 1]) == 
                    JSON.stringify(applicant)) {
                    console.log("this is the last applicant");
                    this.captureEnrollmentDetailsForCOMPAS();
                }
                            //this.applicantenrolledsuccessfully = true;
                        }
                        else {
                            this.blockUI.stop();
                            return this.toast.error("Applicant is already enrolled");
                        }
                    }, (err) => {
                        console.error(err);
                        this.blockUI.stop();
                        return this.toast.error("error enrolling applicant");
                    });
}, 1000);
if(!codeExecute){
    codeExecute = true;
    return this.toast.error("Time out error Please try again");
}
  

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

1. Спасибо. Однако функция тайм-аута показывает сообщение об истечении времени ожидания даже после отправки данных. Как я могу это исправить?

2. Добро пожаловать. В этом случае вам придется управлять данными из серверной части, если вы используете node js для серверной части, поэтому используйте promise для управления этим случаем.