每当我返回true时,函数总是为false

时间:2015-08-22 16:01:41

标签: javascript ajax json angularjs

出于某种原因,控制台总是说“不”。我试图改变所有的回报是真实的,但仍然会说“没有'

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() !== ''){

    }
  }
}

2 个答案:

答案 0 :(得分:1)

您根本没有从checkLogin返回任何值。并且你不能返回任何值,说明检查结果是什么,因为checkLogin在它知道之前返回。

您的返回语句将回调值从回调返回到then 。该调用在checkLogin返回后发生。

由于你不能checkLogin返回true / false(因为它不知道答案),你最好的选择可能是让它返回一个承诺和resolevs使用truefalse。很有趣,你可以通过添加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

中使用