Javascript jquery处理递归ajax调用,如何告诉浏览器它';结束了
我有一个端点,如果有更多的东西要获取,它会返回下一个令牌,我为获取它而编写的代码如下所示:Javascript jquery处理递归ajax调用,如何告诉浏览器它';结束了,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个端点,如果有更多的东西要获取,它会返回下一个令牌,我为获取它而编写的代码如下所示: function get_all_entities(campaign_id, page){ get_campaign_entities(campaign['id'], page) .success(function(data){ if (data['next']){
function get_all_entities(campaign_id, page){
get_campaign_entities(campaign['id'], page)
.success(function(data){
if (data['next']){
console.log(data['next'])
get_all_entities(campaign_id, page+1)
}
})
}
get_all_entities(campaign['id'], 1)
现在,虽然这样做有效,但实际调用它的函数get_all_entities(活动['id',1)
无法知道什么时候一切都完成了。我试着添加一个类似这样的while循环,但它会使我的浏览器崩溃(一切都冻结了)
我还尝试返回get_campaign_实体并使用done回调,但done回调仅适用于第一次调用 您可以添加回调参数:
function get_all_entities(campaign_id, page, callback) {
get_campaign_entities(campaign['id'], page)
.success(function(data) {
if (data['next']) {
console.log(data['next'])
get_all_entities(campaign_id, page + 1, callback)
} else {
callback();
}
})
}
get_all_entities(campaign['id'], 1, () => {
console.log('Done!');
});
简单有效的解决方案。如果你想的话,你可以“积累”数据,然后通过回调把数据传回来,这样你就有了你需要的任何数据。这比我开始用承诺做的要简单得多。非常感谢。
function get_all_entities(campaign_id, page, callback) {
get_campaign_entities(campaign['id'], page)
.success(function(data) {
if (data['next']) {
console.log(data['next'])
get_all_entities(campaign_id, page + 1, callback)
} else {
callback();
}
})
}
get_all_entities(campaign['id'], 1, () => {
console.log('Done!');
});