如何在角度http请求的错误和成功回调之间共享变量

时间:2015-11-04 18:53:41

标签: javascript angularjs angularjs-directive angular-promise

我想在角度js的$ http.get请求的两个方法之间共享一个变量 我的代码看起来像这样

app.run(function($rootScope,$http) {
$rootScope.checkSession = function(){
  window.a = false;
    $http.get('/data/url')
    .success(function(response) {
      window.a = true;
    })
    .error(function(response){
      window.a = false;
    });
    return window.a;
};
});

我的控制器代码看起来像这样

app.controller('profileController', function($scope, $rootScope) {
   alert($rootScope.checkSession());
});

它始终输出false,而如果我在两个函数中都提醒响应它可以正常工作。

2 个答案:

答案 0 :(得分:3)

你的回报和承诺令人困惑。 window.a将在您的promise($ http.get)结算时设置为async,到那时,您的返回值已经返回并被alert()使用。

答案 1 :(得分:2)

您的工作方式不是处理异步调用的正确方法,因为根据当前实现,它始终会从false方法返回checkSession。您需要从异步处理的方法返回promise。该承诺将从其resolve& reject

另外一点是,我希望在工厂内部使用此代码,而不是在$rootScope内部。

<强>工厂

app.factory('sessionFactory', function($http) {
  var sessionFactory = {}
  sessionFactory.checkSession = function(){
    return $http.get('/data/url')
    .then(function(response) {
      return true;
    },(function(response){
      return false;
    });
  };
  return sessionFactory;
});

因此,要在控制器中使用它,首先需要在控制器工厂功能&amp;上注入sessionFactory。然后使用checkSession方法。在那个方法的内部。然后你将返回数据。

<强>控制器

app.controller('profileController', function($scope, sessionFactory) {
   sessionFactory.checkSession().then(function(data){
      alert(data);
   });
});