如何进行分页API调用直到结束?

时间:2014-07-20 14:49:33

标签: angularjs recursion soundcloud

我想这可能是一个非常普遍的问题,但在这种情况下我使用的是AngularJS和SoundCloud API。

这是流程:

  • 致电loadTracks()
  • loadTracks()应该一次加载一个SoundCloud用户的曲目,直到列表用完为止。
  • loadTracks()通过调用另一个函数sc.getTracksByUser(id)来执行此操作,该函数返回一个承诺
  • loadTracks()应在每个50个批次的批次到货时更新变量$scope.tracks

SoundCloud API提供了一个选项offset,因此加载批次相对容易。我认为这是绊倒我的承诺。没有承诺,解决方案将是:

$scope.tracks = [];

var loadTracks = function() {
    var page = -1,
        done = false,
        newTracks;

    while (!done) {
        newTracks = getFiftyTracks(page++);
        for (var i = 0; i < newTracks.length; i++) {
            $scope.tracks.push(newTracks[i]);
        }
        if (newTracks.length < 50) done = true;
    }
}

不幸的是,其中包含getFiftyTracks的行不是它的工作原理。实际实现(使用承诺)是:

sc.getTracksByUser(id).then(function (response) {
    for (var i = 0; i < response.length; i++) {
        $scope.tracks.push(response[i]);
    }
}

我猜这个解决方案是某种递归,但我不确定。

1 个答案:

答案 0 :(得分:0)

你可以这样做

sc.getTracksByUser(id).then(function (response) {
    for (var i = 0; i < response.length; i++) {
        $scope.tracks.push(response[i]);
    }
  // if response return 50 track call getTracksByUser again
  if (response.length === 50) sc.getTracksByUser(id);

});