Angular 7 HTTP: запрос повторной попытки через 2 минуты - PullRequest
0 голосов
/ 14 мая 2019

Я столкнулся с проблемой, которую я не до конца понимаю.

Я делаю запрос http.post (), который запускает вставку 11k в базу данных.Это заняло некоторое время (более 3 минут). Мне удалось улучшить это с помощью пакетной вставки и уменьшить это менее чем за 2 минуты, но это не главное.Дело в том, что я заметил, что если запрос занимает больше 2 минут, можно увидеть, что тот же самый запрос запускается.

В окне отладчика на вкладке Сеть это не видно.Там я вижу только один запрос.

Ниже приведен мой пример углового кода для запроса

    this.http.post(this.portfoliosUrl + '/import-portfolios', portfolios);

Я заметил, что клиент запускает запрос 2, потому что я пытался увеличить время ожиданиякак это:

    this.http.post<Portfolio[]>(this.portfoliosUrl + '/import-portfolios', portfolios)
        .pipe(
            timeout(300000),
            catchError(e => {
                // do something on a timeout
                console.log("error importing portfolio: " + e)
                return of(null);
            })
        );

Видимо, тайм-аут не работает, как я ожидал.Я не жду 5 минут до истечения времени ожидания.Но поскольку я возвращаю нулевое значение, он принимает это как правильный ответ, и второй запрос не запускается.

На стороне сервера мы видим дублированный запрос:

2019-05-14 13:43:45 [http-nio-8181-exec-3]  DEBUG com.robecosam.samsara.security.PathLocationStrategyFilter:35 - PathLocationStrategyFilter: '/rest/portfolios/import-portfolios' Should NOT dispatch

2019-05-14 13:45:45 [http-nio-8181-exec-4]  DEBUG com.robecosam.samsara.security.PathLocationStrategyFilter:35 - PathLocationStrategyFilter: '/rest/portfolios/import-portfolios' Should NOT dispatch

Как видите, 2 разных потока, один и тот же URL и точная разница в 2 минуты.

Это опасно, потому что мы говорим о запросе POST, который имеет побочные эффекты.Если запрос сделан дважды, у нас могут быть проблемы, например, с дополнительными деньгами.

Может кто-нибудь объяснить мне, почему Angular повторяет запрос после 2 минут отсутствия ответа от сервера?Как я могу обойти это?Можно ли увеличить время ожидания http?Можно ли избежать дублирования вызова?

Большое спасибо за помощь.

С уважением

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