【发布时间】:2014-06-14 19:56:05
【问题描述】:
我仍在试图弄清楚如何在递归 AJAX 调用中使用 jQuery 延迟对象。我有这样的代码
function request(page, items){
//building the AJAX return value for JSFiddle dummy AJAX endpoint
var ret = {
totalPage: 10,
currentPage: page,
items: []
};
for (var i = page; i < (page + 5); i++){
ret.items.push(i);
}
//calling the AJAX
$.ajax({
url: '/echo/json/',
method: 'POST',
dataType: 'json',
data: {
delay: 1,
json: JSON.stringify(ret)
},
success: function(data){
if (data.currentPage <= data.totalPage){
var filtered = data.items.filter(function(el){
return el % 2 == 1;
});
var newitems = items.concat(filtered);
console.dir(newitems);
request(data.currentPage + 1, newitems);
} else {
console.dir(items);
//resolve all item
}
}
});
}
function requestAll(){
request(1, []);
//should return a promise tha contains all items
}
这是 JSFiddle http://jsfiddle.net/petrabarus/BHswy/
我知道如何在单个 AJAX 调用中使用 Promise,但我不知道如何在递归 AJAX 调用中使用它。我想以类似于下面的方式调用requestAll 函数
var promise = requestAll();
promise.done(function(items){
console.dir(items);
});
我该怎么做?
【问题讨论】:
-
我认为如果你这样做,你仍然可以使用一个承诺:jsfiddle.net/gGAAy
-
啊,我不知道我能不能做到。谢谢。
-
@JasonP:这并没有真正使用承诺的力量……
-
仅供参考,您的代码实际上并不是递归的,因为在您从
success处理程序调用下一个代码之前,request()已经完成执行。 -
我认为我仍然可以将其称为递归,因为 AJAX 实际上会调用之前调用它的同一个函数。
标签: javascript jquery promise