我一直在研究 jquery deferred objects 有一段时间了,但我被一件事难住了。
“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 请求一个接一个地发生,还是同时发生?
顺便说一句,我研究了用“管道”链接,但由于范围问题,我认为将“管道”与上面的 for 循环一起使用会更难。
另外,为什么原始代码“几乎可以工作”?那里发生了什么?它是否像执行函数一样执行延迟对象,当它执行时会发生什么?