2017-03-06 42 views
1

我有一个返回我的下一个标记,如果有更多的东西来获取一个端点,而我正在写获取它看起来像这样的代码:jQuery的处理递归AJAX调用,如何告诉浏览器,它的完成

 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(campaign['id'], 1)的函数没有办法知道什么时候一切都完成了。我尝试添加像这样一个while循环,但它崩溃我的浏览器(一切都冻结了)

 function get_all_entities(campaign_id, page){ 
      all_done = false 
      get_campaign_entities(campaign['id'], page) 
       .success(function(data){ 
        if (data['next']){ 
         console.log(data['next']) 
         get_all_entities(campaign_id, page+1) 
        } 
        else{ 
         all_done = true 
        } 
       }) 
      while (!all_done){ 
       setTimeout(function(){ 
       }, 2000); 
      } 
      return all_done 
     } 

我还试图返回get_campaign_entities和使用做了回调,但回调做只适用于第一个电话。

回答

1

你可以添加一个回调参数:

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!'); 
}); 
+0

简单而有效的解决方案。如果你愿意,你可以“积累”数据并通过回调传递回来,这样你就可以获得所需的任何数据。 – rasmeister

+0

这比我刚开始用Promise做的要简单得多。谢谢! –