私はSpotifyにサインインして実行するのをやめていました私のアプリケーションではのサービスからデータが取得されていますが、コードが完全に停止することが約束されています。Javascript約束と更新の変数
$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()
機能がアクションをリフレッシュするためにプルに発生します。
はここControllers.js
から関連するセクションです。この関数はfineと呼ばれますが、最初のconsole.log()
の後で停止します。ここでは(他のloggings付き)コンソールからの抜粋です:最後の行の後
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()
関数内から呼び出されます。私は何を間違えたのですか?
編集:ここServices.js
からSpotifyService.getTrack
機能です:
SpotifyService.getTrack
リターンの約束を想定し
getTrack: function(id, loved, from) {
var storedToken = window.localStorage.getItem('spotify-token');
if (storedToken !== null) {
return trackInfo(id).then(function(data) {
return data;
})
.catch(function(error) {
console.log(error);
});
} else {
login();
}
}
ここでは、トラックの先頭にあるキーをインデックスとして使用しています。 –
私は 'SpotifyService.getTrack'が約束を返すものだと思います。 '$ scope.getTracks'は同期式です(あなたの配列を返す、約束ではありません)。 –
もう少し明確にするために 'SpotifyService.getTrack'関数を追加します... –