Angular: HTTP Post всегда вызывал второй запрос, когда первый запрос истек - PullRequest
0 голосов
/ 15 марта 2019

В моем приложении 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-пост-запрос запускаться два раза.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...