Я уже возился с возможностью входа в Spotify и выполнял самый извлечение данных из службы в моем приложении Ionic, но обещание полностью приостанавливает выполнение кода.Javascript Promises and update variables
Вот соответствующий раздел из 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()
, которая никогда не называется. Что я сделал не так?
Edit: Вот SpotifyService.getTrack
функция от Services.js
:
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' для немного большей ясности ... –