Я тестировал новые отложенные функции AJAX в jquery 1.5 и впечатлен их простотой и мощью. Есть более важный вопрос, который я связал с лучшим способом поставить эти запросы в очередь.
У меня есть два сценария: последовательный и параллельный, если хотите. Я хочу избежать терминов sync / async, потому что я хочу, чтобы все они были асинхронными запросами, чтобы пользователь мог выполнять другие действия, ожидая обработки очереди. Затем я хочу вызвать одну функцию, когда очередь закончит обработку.
В «последовательном режиме» с двумя запросами я бы хотел, чтобы они обрабатывались следующим образом:
RequestA -> ResponseA -> RequestB -> ResponseB -> EndOfQueue
В «параллельном режиме» с двумя запросами я хочу получить такой результат:
RequestA -> RequestB (ResponseA, ResponseB обрабатывается всякий раз, когда готов) -> EndOfQueue
В любом случае, если какой-либо запрос завершится неудачно, я бы хотел, чтобы очередь остановилась и передала управление функции отказа.
У меня есть требования, которые определяют динамическую длину очереди, поэтому я не думаю, что смогу просто связать кучу отложений .then () или .when () вместе, так как я не буду знать, один это или сто предметов. Я выполняю бизнес-логику на сервере через API поставщика, поэтому пакетирование на стороне сервера будет затруднено, поскольку я не могу контролировать этот код.
Я создал тестовые случаи, которые выполняют «параллельный» случай и вызывают функцию when () после успешного завершения всех этих тестов, но эти тесты не являются динамическими по длине очереди и не переносимы в последовательную модель.
Я вижу, как можно создать собственный объект очереди, чтобы справиться с этим, но кажется, что все части уже написаны для меня в jquery (?). Я посмотрел, но не нашел пример, который охватывает последовательные запросы таким образом.
Есть какие-нибудь мысли о том, как справиться с этим с помощью функции jquery queue / deferred?