Вопрос

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

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

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

Requesta -> responsea -> requestb -> responseb -> endofqueue

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

Requesta -> requestb (responsea, responseb обрабатывается, когда готов) -> Endofqueue

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

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

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

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

Есть ли мысли о том, как справиться с этим с помощью очереди jQuery Queue/Offerred?

Это было полезно?

Решение

Самый простой способ достижения вашего запроса -> responsea -> requestB -> responseB Заказ будет использовать что -то вроде этого:

var queue = [];

function qNext() {
    $.ajax(queue.shift()).success(qNext);
}

function qAjax(options) {
    queue.push(options);
}

qAjax({
    // $.ajax options
});

qAjax({
    // $.ajax options
});

qNext();

Видеть Демо.

Это несколько упрощенная версия ваших требований, но было бы легко добавить обратный вызов, чтобы запустить после того, как очередь пуст.

Вы уверены, что не хотите, чтобы порядок запросов -> requestb -> responsea -> responseb?

Другие советы

Пожалуйста, обратитесь к двум вопросам, которые я задал

  1. jQuery отложено не работать
  2. jQuery. Когда понимание

Надеюсь, вы сможете понять эту концепцию.

Посмотри это комментарий на.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top