Как вы обрабатываете задержанный запрос AJAX, который выходит из строя (и вызывает состояние гонки)? - PullRequest
0 голосов
/ 21 января 2020

Существуют ли стандартные способы обработки запроса Ajax, который был отложен и вышел из строя и вызвал условия гонки? Метод, который я видел, кажется немного хакерским или ad ho c, и по некоторым причинам некоторые справочники JavaScript или Ajax объемом 800 или 1000 страниц не имеют небольшого раздела, посвященного этой теме c, и иногда на работе мы даже не справляемся с этим.

Я видел два сообщения о , как отменить Ajax или , как рассчитать время ожидания , но их фокус отменяет его, а не обрабатывает Ajax запросов, которые возвращаются не по порядку.

Например, если используется вариант:

  1. Пользователь выбирает TrackPad, чтобы обновить приказ. Запрос Ajax отправлен.
  2. Но (1) имеет некоторую задержку на сервере, и вместо этого пользователь выбирает Мышь, и сервер возвращается с новыми ценами, и заказ на странице обновляется.
  3. Теперь (1) возвращается и обновляет цены и детали заказа на странице в TrackPad снова.

Использует xhr.abort() перед отправкой нового запроса Ajax достаточно хорошо обращаться с делом? Как насчет , использующего временную метку или Ajax идентификатор запроса, чтобы определить, какой Ajax запрос это и обрабатывает только последний ? Но если abort() достаточно хорошо, есть ли причина, по которой мы все еще можем использовать метод отметки времени или идентификатора?

Верно ли, что один клиент может использовать метод идентификатора или отметки времени? Что, если сервер берет идентификатор или метку времени и отправляет их обратно клиенту, не является ли это необходимым? (так что просто позвольте клиенту сделать это).

Поскольку новый вызов JavaScript fetch() прерван, но находится только на экспериментальной стадии , так что кажется, что вы должны использовать идентификатор или метку времени для выполнения работы?

Ситуация еще более усложняется тем, что если вы измените TrackPad на Mouse, а затем сделаете еще один запрос Ajax, который не связан (например, получение информации о сколько оперативной памяти вам нужно), тогда этот запрос Ajax не должен отменять предыдущий запрос, поэтому вы не можете просто иметь одну функцию вызова Ajax, которая всегда отменяет предыдущий. Но если этот Ajax звонок о том, за сколько дней может быть отправлен продукт, то он должен отменить предыдущий Ajax звонок, так как вы не хотите, чтобы он сказал "готов к отправке" на экране, но затем предыдущий отложенный Ajax вызов для обновления страницы до того, что на самом деле не готово к отправке, но на экране все еще отображается сообщение «готов к отправке».

...