Я уже некоторое время исследую отложенные объекты jquery, и я нахожусь в тупике.
Методы "done", всегда "then", "etc" принимают в качестве аргументов свои аргументы,функции, которые должны вызываться при разрешении отложенного объекта.
Однако я попытался объединить запросы, передав отложенный объект в метод Always, и что , похоже, тоже работает:
// A is an array of data
var req = ajax(url + "?d=" + A[0]).done(processResults).fail(reportFailure);
for (var i = 1 ; i < A.length ; i++) {
var tmp = ajax(url + "?d=" + A[i]).done(processResults).fail(reportFailure);
req.always(tmp);
req = tmp;
}
Однако на самом деле это не работает.Потому что, когда я следую приведенному выше коду с таким:
req.always(foobar);
, кажется, что foobar вызывается в какое-то случайное время, не обязательно после обработки последнего элемента в массиве.
Будет ли этолучше использовать когда?
// A is an array of data
var req = $.when(ajax(url + "?d=" + A[0]).done(processResults).fail(reportFailure));
for (var i = 1 ; i < A.length ; i++) {
req = $.when(req, ajax(url + "?d=" + A[i]).done(processResults).fail(reportFailure));
}
req.always(foobar);
Приведет ли приведенный выше код (с использованием «когда») к тому, что запросы ajax будут выполняться один за другим, или они будут выполняться одновременно?
Я изучилМежду прочим, цепочка с "pipe", но из-за проблем с областью видимости, я думаю, было бы сложнее использовать "pipe" с циклом for, как описано выше.
Кроме того, почему оригинальный код "почти работает"?Что там происходит?Выполняет ли он отложенный объект, как если бы он был функцией, и что происходит, когда он это делает?