Цикл с каждой итерацией происходит только после отсрочки jQuery, когда / тогда возможно без рекурсии? - PullRequest
4 голосов
/ 19 января 2012

Я хочу вызвать отложенные функции jQuery в цикле, но каждая итерация должна ждать завершения предыдущей итерации, используя отложенную when()

  function (num_of_iterations) {

    var arr = [];

    for (var i = 1; i < num_of_iterations; ++i) {
      arr.push($.getJSON( ... 1 ... ));
      arr.push($.getJSON( ... 2 ... ));
      ...

      $.when.apply($, arr).then(function() {
        // somehow do the next iter. only now that all the asynch getJSON's are done
      });
    }
    return;
  }

Теперь, конечно, поскольку getJSON является асинхронной для всехзапросы на всех итерациях будут фактически отправлены до того, как будет вызван любой из when.

Я понимаю, что могу добиться этого с помощью рекурсии, вызвав функцию, упаковывающую то, что у меня есть в then.

Но мне интересно, есть ли какая-то техника, которую я пропускаю, чтобы использовать вместо рекурсии. Я всегда беспокоюсь о рекурсии, использующей стек в какой-то момент в будущем.Параметр num_of_iterations может быть довольно большим.

Могу ли я использовать для этого pipe()?У меня много проблем с поиском документации по нему со всеми разговорами о фильтрации ...

Ответы [ 2 ]

1 голос
/ 24 сентября 2012

Я думаю, что вы могли бы использовать цепочку труб в этом случае. Проверьте этот рабочий jsfiddle и дайте мне знать, если это более или менее то, что вы ищете. http://jsfiddle.net/tchaffee/Df3ay/3/

0 голосов
/ 19 января 2012

Цепочка функций и рекурсия - довольно естественная вещь в асинхронном JavaScript.Как видно из инструкции for, ваш цикл будет выполняться 10 раз.Это означает, что у вас также будет стек рекурсии, равный 10, так что на самом деле не о чем беспокоиться о размере стека (если вы не испортили свое условие возврата, и оно будет работать вечно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...