Как управлять очередями запросов ajax в jquery 1.5?

Я тестировал новые отложенные функции AJAX в jquery 1.5 и впечатлен их простотой и мощностью. Есть более крупный вопрос, который я связал с тем, как лучше всего поставить эти запросы в очередь.

У меня есть два сценария: последовательный и параллельный, если хотите. Я хочу избежать условий синхронизации / асинхронности, потому что я хочу, чтобы все они были асинхронными запросами, чтобы пользователь мог выполнять другие действия, ожидая обработки очереди. Затем я хочу вызвать одну функцию, когда очередь завершит обработку.

В «последовательном режиме», имея два запроса, я бы хотел, чтобы они обрабатывались следующим образом:

RequestA -> ResponseA -> RequestB -> ResponseB -> EndOfQueue

В «параллельном режиме» с двумя запросами я хочу получить этот результат:

RequestA -> RequestB (ResponseA, ResponseB обрабатывается, когда готов) -> EndOfQueue

В любом случае, если какой-либо запрос завершится неудачно, мне нужна очередь для остановки и передачи управления функции отказа.

У меня есть требования, которые определяют длину динамической очереди, поэтому я не думаю, что смогу просто связать кучу .then () или. when () откладывается вместе, так как я не знаю, один это или сотня элементов. Я выполняю бизнес-логику на сервере через API поставщика, поэтому пакетирование на стороне сервера будет затруднено, поскольку я не могу контролировать этот код.

Я создал тестовые примеры, которые выполняют «параллельный» случай и вызывают Функция when () после того, как все успешно завершена, но эти тесты не являются динамическими по длине очереди и не переносятся в последовательную модель.

Я вижу, как я могу создать пользовательский объект очереди, чтобы справиться с этим, но он похоже, что все части уже написаны для меня в jquery (?). Я просмотрел, но не нашел примера, который охватывает таким образом последовательные запросы.

Есть ли какие-либо мысли о том, как справиться с этим с помощью функции очереди / отложенного запроса jquery?

6
задан Graham 16 June 2013 в 17:28
поделиться