Pet*_*rus 10 javascript jquery promise
我还在试图弄清楚如何在递归的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
}
Run Code Online (Sandbox Code Playgroud)
这是JSFiddle http://jsfiddle.net/petrabarus/BHswy/
我知道如何在单个AJAX调用中使用promise,但我不知道如何在递归的AJAX调用中使用它.我想以requestAll
类似下面的方式调用该函数
var promise = requestAll();
promise.done(function(items){
console.dir(items);
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Ber*_*rgi 14
success
如果要使用promises,则不应使用该参数.相反,你想要return
一个承诺,并且你想用来将then
一个承诺的结果转换成不同的东西,甚至可能是另一个承诺.
function request(page) {
…
// return the AJAX promise
return $.ajax({
url: '/echo/json/',
method: 'POST',
dataType: 'json',
data: {
delay: 1,
json: JSON.stringify(ret)
}
});
}
function requestOddsFrom(page, items) {
return request(page).then(function(data){
if (data.currentPage > data.totalPage) {
return items;
} else {
var filtered = data.items.filter(function(el){ return el%2 == 1; });
return requestOddsFrom(data.currentPage + 1, items.concat(filtered));
}
});
}
function requestAll(){
return requestOddsFrom(1, []);
}
requestAll().then(function(items) {
console.dir(items);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8785 次 |
最近记录: |