В моем приложении angular.js у меня есть кнопка для отправки данных в node.js. Но когда обработка занимает слишком много времени и превышает тайм-аут, в node.js появляется другой триггер, который обрабатывает второй раз. Я знаю, что Observable
имеет retry
функцию, но я ее не использовал.
myapp.component.ts
private ngUnsubscribe: Subject<{}> = new Subject();
constructor(private myappService: MyappService) {
}
onSubmit(): void {
this.myappService.submit()
.pipe(takeUntil(this.ngUnsubscribe))
.subscribe(result => {
// handle result from HTTP Post
});
}
myapp.service.ts
constructor(private http: HttpClient) {
}
submit(): Observable<any> {
const url: string = "localhost/api/submit";
return this.http.post<any>(url, {}).pipe(catchError(/* handle error */));
}
backend (node.js)
exports.submit = (req, res, next) => {
console.log('process');
// process something but it exceeds timeout
console.log('complete');
}
Вот мой журнал, когда я нажимаю кнопку только 1 раз.
process // first and intended processing
process // second and unintended process start when the first processing is exceed the timeout
complete // the first processing still run into this code
complete // the second processing
Express Router Config -
const router = require('express').Router();
const main = require('../controllers/main');
router.post('/api/submit',
(req, res, next) => {
main.submit(req, res, next);
});
module.exports = router;
Я хотел бы знать, что я сделал неправильно, и заставить HTTP-пост-запрос запускаться два раза.
Заранее спасибо.