我一直在研究jQuery的推遲對象一段時間了,而我一直在困擾着一件事。jquery:當您將延遲對象傳入「then」時會發生什麼?
「完成」,「總是」,「然後」等等方法將延遲對象解析時應該調用的函數作爲它們的參數。
但是我試圖通過傳遞延遲對象進入「永遠」的方法鏈接請求,而且這似乎工作過:
// 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循環會更困難。
此外,爲什麼原始代碼「幾乎工作」?那裏發生了什麼?它是否像執行函數一樣執行延遲對象,當它執行時會發生什麼?
PS:我嘗試使用$。當它似乎工作。然而,我仍然不明白爲什麼要這樣做「有點」的工作。這似乎是創建請求鏈比使用管道更好的方式 - 但我不確定這是如何「何時」打算使用。 – eeeeaaii
當ajax調用的結果用於構建另一個Ajax調用的輸入時,.pipe()很有用。在你的情況下,它看起來像並行ajax調用,使用$ .when()合併,更加適當。在我的回答中,我向您展示瞭如何在合併的延遲 – olivieradam666
p.p.s.上使用.done()註冊單個成功回調函數。使用$ .wait實際上並不奏效。但下面的「管道」的解決方案似乎工作,但我必須解決與「我」的範圍界定問題 – eeeeaaii