jquery: o que acontece quando você passar um objeto adiada para “depois”

Estou pesquisando objetos adiados por jquery há um tempo e estou perplexo com uma cois

The "feito", "sempre", "então", etc métodos tomar, como seus argumentos, funções que devem ser chamados quando o objeto diferido seja resolvido.

No entanto, tentei encadear solicitações passando um objeto adiado para o método "always", e que parece para trabalhar também:

// 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;
}

No entanto, isso realmente não funciona. Porque quando sigo o código acima com este:

req.always(foobar);

foobar parece ter sido chamado em algum momento aleatório, não necessariamente depois que o último elemento da matriz é processad

Seria melhor usar quando?

// 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);

Would o código acima (usando "quando") resultado nas requisições Ajax acontecendo um após o outro, ou se eles ocorrem simultaneamente?

propósito, olhei para o encadeamento com "pipe", mas, devido a problemas de escopo, acho que seria mais difícil usar "pipe" com um loop for, como acim

Além disso, por que o código original "quase funciona"? O que está acontecendo lá? É da execução do objeto adiada como se fosse uma função, eo que acontece quando ele faz isso?

questionAnswers(1)

yourAnswerToTheQuestion