我想这可能是一个非常普遍的问题,但在这种情况下我使用的是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]);
}
}
我猜这个解决方案是某种递归,但我不确定。
答案 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);
});