出于某种原因,控制台总是说“不”。我试图改变所有的回报是真实的,但仍然会说“没有'
function checkLogin($http) {
$http.get('http://localhost/api/v1/ping').
then(function(response) {
if(response.status === 200) {
return true;
} else {
return false;
}
}, function() {
return false;
});
}
/**
* @ngInject
*/
function loginController($scope, $location, $cookies, $http) {
if(checkLogin($http) === true) {
console.log('yes');
} else {
console.log('no');
if($location.path() !== ''){
}
}
}
答案 0 :(得分:1)
您根本没有从checkLogin
返回任何值。并且你不能返回任何值,说明检查结果是什么,因为checkLogin
在它知道之前返回。
您的返回语句将回调值从回调返回到then
。该调用在checkLogin
返回后发生。
由于你不能checkLogin
返回true
/ false
(因为它不知道答案),你最好的选择可能是让它返回一个承诺和resolevs使用true
或false
。很有趣,你可以通过添加return
::
function checkLogin($http) {
return $http.get('http://localhost/api/v1/ping').
//^^^^^^
then(function(response) {
if(response.status === 200) {
return true;
} else {
return false;
}
}, function() {
return false;
});
}
这是有效的,因为then
会返回一个新的承诺,该承诺将通过您从then
回调中返回的内容来实现。
然后当你使用它时,使用诺言。
function loginController($scope, $location, $cookies, $http) {
checkLogin($http).
then(function(loggedIn) {
if(loggedIn) {
console.log('yes');
} else {
console.log('no');
if($location.path() !== ''){
}
}
});
}
(试图在那里使用你的缩进样式,如果我没有完全正确的话,道歉。)
答案 1 :(得分:-1)
回调,checklogin应该接收回调函数作为参数。或者你可以使用promises,因为它们在$ http
中使用