我想打電話給jQuery的延遲功能於一身的循環,但每次迭代應等待前一次迭代使用來完成遞延when()
循環與每次迭代只發生在jQuery推遲時/然後可能沒有遞歸?
function (num_of_iterations) {
var arr = [];
for (var i = 1; i < num_of_iterations; ++i) {
arr.push($.getJSON(... 1 ...));
arr.push($.getJSON(... 2 ...));
...
$.when.apply($, arr).then(function() {
// somehow do the next iter. only now that all the asynch getJSON's are done
});
}
return;
}
現在當然因爲getJSON
是異步的所有迭代所有的請求實際上會在調用任何when
之前發送。
我知道我可以通過調用一個函數來實現這個遞歸,這個函數包含了我在這裏的then
。
但我想知道是否有一些技術,我錯過了,而不是遞歸。我總是擔心在將來某個時候使用堆棧的遞歸。參數num_of_iterations
可能會非常大。
我可以使用pipe()
嗎?我在處理文檔時遇到了很多麻煩,關於它的所有關於過濾的討論......
那麼這只是簡化的示例代碼。真正的數字來自外部的API,它只會隨着時間的推移而增加,我想考慮未來,以及滿足我的好奇心。我會更新我的例子... – hippietrail
好吧,我很快測試了它,並得到了30000左右的數量太多的遞歸錯誤(如果您正在爲每個循環提出幾個請求,這可能意味着您將輕鬆製作超過十萬請求 - 這可能是首先要擔心的事情)。這就是說,你可能也想看看async.js https://github.com/caolan/async – Daff