我是一个Angular noob,我仍然习惯了承诺的工作方式。
我有一个用例,我需要使用 $ http 调用JSON WS的结果填充集合。每次调用此WS都会返回可变数量的对象(总是超过20个),但是我希望我的数组集合有20个元素。
当集合中包含20个元素时,我需要执行一些操作。由于承诺的异步性质(例如,我不能简单地在承诺之下添加逻辑,因为它将在它们之前执行)我已经挣扎了一段时间才能做到这一点并提出了两种方法虽然我不知道是否有任何其他方法可以实现我想要的东西 - 它们似乎不是一个好的解决方案。 $ scope.renderedTracks保存集合。
尝试1 - $ watchCollection
$scope.updateTracks = function() {
if ($scope.renderedTracks.length == 20)
{
// Do the desired actions
}
};
$scope.$watchCollection('renderedTracks', $scope.updateTracks);
尝试2 - 在承诺内执行检查
$http.get('https://localhost/artists' + artistId + '/related-artists').then(function (response) {
for (i = 0; i < 20; i++)
{
//Get random artist from user's favorite artists
artistIndex = Math.floor(Math.random() * response.data.artists.length);
artistId = response.data.artists[artistIndex].id;
$http.get('https://localhost/artists' + artistId + '/top-tracks').then(function (response) {
track = response.data.tracks[Math.floor(Math.random() * response.data.tracks.length)];
if (track)
{
track.originalArtist = artistName;
$scope.renderedTracks.push(track);
if ($scope.renderedTracks.length == 20)
{
// Do required actions
}
}
}, function (err) {
console.log(err);
});
}
}, function (err){
console.log(err);
});
提前致谢。