运行 angular-Ionic 服务中的 spotify 方法失败
Failure to run angular-spotify method in Ionic service
我一整天都在努力处理 Ionic 服务中 Spotify 数据的检索,之前可以正常工作的东西现在突然不工作了。
我在服务中设置了登录脚本,一切正常。但是,在 updateInfo
中的 console.log('updateInfo() called');
方法之后,程序将跳过该函数的其余部分,避免从 Spotify 收集数据。
这是目前为止的全部服务:
.factory('SpotifyService', function ($cordovaOauth, Spotify) {
var currentUser = {},
userId = '';
function login() {
console.log('login() called');
$cordovaOauth.spotify('583ac6ce144e4fcb9ae9c29bf9cad5ef', ['user-read-private', 'playlist-read-private']).then(function (result) {
window.localStorage.setItem('spotify-token', result.access_token);
Spotify.setAuthToken(result.access_token);
}, function (error) {
console.log("Error ->" + error);
});
}
function updateInfo() {
console.log('updateInfo() called');
Spotify.getCurrentUser().then(function (data) {
console.log('Gathering data');
currentUser = data;
userId = data.id;
console.log("CURRENT USER: " + userId + " - (" + currentUser + ")");
console.log('Done updating');
});
}
return {
getUser: function () {
console.log('SpotifyService.getUser() called');
var storedToken = window.localStorage.getItem('spotify-token');
if (storedToken !== null) {
console.log('Token accepted');
currentUser = updateInfo();
console.log('getUser function returns: ' + userId + " - (" + currentUser + ")");
//currentUser = Spotify.getCurrentUser();
} else {
console.log('getUser else accessed');
login();
}
return currentUser;
}
};
})
关于为什么 Spotify.getCurrentUser()
方法不会 运行 的任何想法?
您的问题似乎与承诺有关。如果 Spotify.getCurrentUser()
returns 是一个 promise,您将不知道错误是什么,因为您还没有定义 catch
语句。您应该阅读 Promises in Angular Explained as a Cartoon 以获得对 promise 的简单明了的解释。
修改您的代码以添加 catch 语句:
Spotify.getCurrentUser()
.then(function (data) {
...
})
.catch(function(error){
console.log(error);
});
每次你使用像 $cordovaOauth.spotify() 或 Spotify.getCurrentUser() 这样的承诺时你必须定义 .catch 块,这将帮助你调试。
将 .catch 块添加到 getCurrentUser() 函数调用以跟踪您的错误,我还建议将 auth 函数调用中的错误回调模式更改为 .catch 块
.catch(function(error){
console.log(error);
});
我一整天都在努力处理 Ionic 服务中 Spotify 数据的检索,之前可以正常工作的东西现在突然不工作了。
我在服务中设置了登录脚本,一切正常。但是,在 updateInfo
中的 console.log('updateInfo() called');
方法之后,程序将跳过该函数的其余部分,避免从 Spotify 收集数据。
这是目前为止的全部服务:
.factory('SpotifyService', function ($cordovaOauth, Spotify) {
var currentUser = {},
userId = '';
function login() {
console.log('login() called');
$cordovaOauth.spotify('583ac6ce144e4fcb9ae9c29bf9cad5ef', ['user-read-private', 'playlist-read-private']).then(function (result) {
window.localStorage.setItem('spotify-token', result.access_token);
Spotify.setAuthToken(result.access_token);
}, function (error) {
console.log("Error ->" + error);
});
}
function updateInfo() {
console.log('updateInfo() called');
Spotify.getCurrentUser().then(function (data) {
console.log('Gathering data');
currentUser = data;
userId = data.id;
console.log("CURRENT USER: " + userId + " - (" + currentUser + ")");
console.log('Done updating');
});
}
return {
getUser: function () {
console.log('SpotifyService.getUser() called');
var storedToken = window.localStorage.getItem('spotify-token');
if (storedToken !== null) {
console.log('Token accepted');
currentUser = updateInfo();
console.log('getUser function returns: ' + userId + " - (" + currentUser + ")");
//currentUser = Spotify.getCurrentUser();
} else {
console.log('getUser else accessed');
login();
}
return currentUser;
}
};
})
关于为什么 Spotify.getCurrentUser()
方法不会 运行 的任何想法?
您的问题似乎与承诺有关。如果 Spotify.getCurrentUser()
returns 是一个 promise,您将不知道错误是什么,因为您还没有定义 catch
语句。您应该阅读 Promises in Angular Explained as a Cartoon 以获得对 promise 的简单明了的解释。
修改您的代码以添加 catch 语句:
Spotify.getCurrentUser()
.then(function (data) {
...
})
.catch(function(error){
console.log(error);
});
每次你使用像 $cordovaOauth.spotify() 或 Spotify.getCurrentUser() 这样的承诺时你必须定义 .catch 块,这将帮助你调试。
将 .catch 块添加到 getCurrentUser() 函数调用以跟踪您的错误,我还建议将 auth 函数调用中的错误回调模式更改为 .catch 块
.catch(function(error){
console.log(error);
});