我必须包含ajax请求的函数。第一个请求批处理。基于batchId,它继续获取批处理,直到它在存储累积结果的同时返回完成。一旦它返回完成,那么batchRequest应该返回一个包含所有结果的回调。
我不想对此使用setTimeout,因为它在Android WebView中存在一些问题。它应该在上一次完成之后立即进行另一次getBatch检查。
var batchRequest = function(request, callback) {
$.ajax({
//some ajax request here
success: function(data) {
var results = [];
getBatch(data.batch.id, function(result) {
results.push(results.item);
if (result.done) {
callback(results);
} else {
getBatch(result.id);
}
});
}
});
};
var getBatch = function(batchId, callback) {
$.ajax({
//get using the batchId
success: function(data) {
callback(data);
}
});
};
最初我将getBatch函数嵌套在batchRequest函数中,但我觉得这不是最好的方法。如何让batchRequest循环getBatch并在完成后返回所有内容?
答案 0 :(得分:1)
你应该可以将它缩短为类似的东西(未经测试):
var getBatch = function (request, callback) {
var results = [],
getBatchPart = function (batchId) {
$.ajax({
// ajax params
}).done(function (data) {
results.push(data.item);
if (data.done) {
callback(results);
} else {
getBatchPart(batchId);
}
});
};
$.ajax({
// ajax params
}).done(function (data) {
getBatchPart(data.batch.id);
});
});
答案 1 :(得分:0)
我确实找到了解决问题的方法,让我保留两个功能。如果我将getBatch
调用包装在另一个名为getNext
的函数中,那么它会在将数据附加到结果变量时链接调用。最后,当它返回它已完成时,它会将其发送给具有综合结果的回调。
var batchRequest = function(request, callback) {
$.ajax({
//some ajax request here
success: function(data) {
getNext(data.batch.id);
}
});
var results = [];
function getNext(batchId) {
getBatch(batchId, function(result) {
results.push(result.item);
if (result.done) {
callback(result);
} else {
getNext(result.id);
}
});
};
};
var getBatch = function(batchId, callback) {
$.ajax({
//get using the batchId
success: function(data) {
callback(data);
}
});
};