jquery: что происходит, когда вы передаете отложенный объект в «then»?
Я уже некоторое время исследую отложенные объекты jquery, и я в тупике.
Методы «done», «always», «then» и т. Д. Принимают в качестве аргументов функции, которые должны вызываться при разрешении отложенного объекта.
Однако я попытался объединить запросы, передав отложенный объект в метод 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, как описано выше.
Кроме того, почему оригинальный код "почти работает"? Что там происходит? Выполняет ли он отложенный объект, как если бы он был функцией, и что происходит, когда он это делает?