jquery处理递归ajax调用,如何告诉浏览器它已完成

时间:2017-03-06 23:45:46

标签: javascript 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 个答案:

答案 0 :(得分: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!');
});