我一直在搞乱登录Spotify并从我的Ionic应用程序中的服务执行大多数数据检索,但承诺导致代码完全暂停。
以下是Controllers.js
的相关部分:
$scope.tracks = [];
$scope.getTracks = function () {
var tracks = {},
i;
for (i = 0; i < Tracks.uris.length; i++) {
console.log('Getting Track ' + i);
tracks[i] = SpotifyService.getTrack(Tracks.uris[i].id, Tracks.uris[i].loved, Tracks.uris[i].from);
}
return tracks;
}
$scope.refresh = function () {
console.log('Refresh Tracks Started');
$scope.tracks = $scope.getTracks().then(function (data) {
console.log('Getting tracks');
return data;
})
.catch(function (error) {
console.log(error);
});
$scope.$broadcast('scroll.refreshComplete');
}
拉动刷新操作发生$scope.refresh()
功能。此函数称为精细,但在第一个console.log()
后停止。以下是控制台的摘录(包含其他记录):
2016-04-07 14:30:38.419 HelloCordova[8269:377355] updateInfo() data: [object Object]
2016-04-07 14:30:38.419 HelloCordova[8269:377355] Done updating
2016-04-07 14:30:38.419 HelloCordova[8269:377355] getUser() data: [object Object]
2016-04-07 14:30:38.420 HelloCordova[8269:377355] $scope.load() data: [object Object]
2016-04-07 14:30:41.198 HelloCordova[8269:377355] Refresh Tracks Started
在最后一行之后,没有其他事情发生,应用程序被挂起。忽略以上几行,它们与之前的问题有关。
我不确定发生了什么,它应该从Spotify中检索一些跟踪数据,但是这个逻辑都是从$scope.getTracks()
函数中调用的,它永远不会被调用。我做错了什么?
修改:以下是来自SpotifyService.getTrack
的{{1}}函数:
Services.js
答案 0 :(得分:1)
假设SpotifyService.getTrack
返回一个promise,$scope.getTracks
函数返回一个promise数组。我认为您正在寻找的是在收到所有曲目后分配$scope.tracks
。试试这个:
$q.all($scope.getTracks()).then(function (data) {
console.log('Getting tracks');
$scope.tracks = data;
})
.catch(function (error) {
console.log(error);
});