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?