#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 для управления этим случаем.