2014-07-20 29 views
0

我想這可能是一個相當普遍的問題,但在這種情況下,我使用AngularJS和SoundCloud API。如何進行分頁API調用直到達到最終?

這裏的流量:

  • 呼叫loadTracks()
  • loadTracks()應一次裝載的SoundCloud用戶,50的軌道,直到列表用完。
  • loadTracks()通過調用另一個函數,sc.getTracksByUser(id),它返回一個承諾執行此
  • loadTracks()應該更新變量$scope.tracks與每個50軌道批次當它到達

的的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]); 
    } 
} 

我猜這個解決方案是某種遞歸,但我不確定。

+0

您還沒有確定是什麼問題。 'getTracksByUser'的聲明在哪裏。你不需要傳遞一個'page'嗎? – charlietfl

+0

如何將頁碼或偏移量傳遞給getTracksByUser? –

回答

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); 

}); 
相關問題