【问题标题】:Function is always false whenever I return true每当我返回 true 时,函数始终为 false
【发布时间】:2015-08-22 16:01:41
【问题描述】:

出于某种原因,控制台总是说“不”。我已尝试将所有返回值更改为 true,但它仍然会说“不”

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

    }
  }
}

【问题讨论】:

  • 事件序列:1 - 调用 checkLogin。 2 - 发送 Ajax 请求。 3 - checkLogin 返回。 4 - 收到 Ajax 响应。注意:函数返回(3)之前接收到Ajax响应(4)。

标签: javascript ajax json angularjs


【解决方案1】:

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

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

由于你不能让checkLogin 返回true/false(因为它不知道答案),你最好的选择可能是让它返回一个承诺并用true 或@ 解析987654329@。有趣的是,您只需添加 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 回调中返回的内容来实现。

那么当你使用它的时候,使用promise。

function loginController($scope, $location, $cookies, $http) {
  checkLogin($http).
  then(function(loggedIn) {
    if(loggedIn) {
      console.log('yes');
    } else {
      console.log('no');
      if($location.path() !== ''){

      }
    }
  });
}

(尝试在此处使用您的缩进样式,如果我没有完全正确,请道歉。)

【讨论】:

    【解决方案2】:

    回调,checklogin 应该接收一个回调函数作为参数。或者你可以使用 Promise,因为它们在 $http

    中使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多