Это зависит от того, хотите ли вы сохранить все вызовы или отказаться от любых вызовов, сделанных во время полета.
Если вы хотите сохранить все вызовы, вы не должны делать вызовы Ajax напрямую, а скорее помещать их в очередь. Тогда абстракция очереди будет отвечать за вызовы Ajax, используя переменную блокировки, чтобы проверить, находится ли она уже в полете. Когда вызов Ajax принимается или выдается из строя, он может инициировать очередь для проверки любых ожидающих вызовов, поэтому следующий может быть запущен.
Если вы хотите отменить вызовы, сделанные во время полета, вам будет действовать простой механизм блокировки. Для любого вызова просто проверьте, истинна ли блокировка, а если нет, запустите запрос и установите для блокировки значение true. Если блокировка истинна, ничего не делайте (отбросьте ее). Снимите блокировку, когда вызов получен или истечет время ожидания.
Сделайте каждый вызов в функции обратного вызова предыдущего. – Barmar
Можете ли вы объяснить, почему? Казалось бы, единственный способ активно предотвратить второй асинхронный вызов от полета в полете - это «занятый цикл», пока первый не будет завершен, и это не хорошо ... [или на Бармаре просто расположите свой код так, чтобы они запускаются по очереди с обратного вызова предыдущего вызова] – Alnitak
@Alnitak Отдельный вопрос для себя, я думаю. Спасибо – CodingIntrigue