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, как описано выше.

Кроме того, почему оригинальный код "почти работает"? Что там происходит? Выполняет ли он отложенный объект, как если бы он был функцией, и что происходит, когда он это делает?

Ответы на вопрос(1)

Ваш ответ на вопрос