Я столкнулся с проблемой, которую я не до конца понимаю.
Я делаю запрос 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?Можно ли избежать дублирования вызова?
Большое спасибо за помощь.
С уважением