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

How to share a variable between error and success callback of angular http request

本文关键字:成功 回调 之间 共享变量 错误 angular http 请求      更新时间:2023-09-26

我想在angular 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,而如果我在两个函数中都提醒响应,它就可以正常工作。

您混淆了回报和承诺。window.a将在您的promise($http.get)解析时设置为async,到那时,alert()已经返回并使用了带有初始值的return。

处理异步调用的方式不是正确的,根据当前实现,它总是从checkSession方法返回false。您需要从异步处理的方法返回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;
});

因此,要在控制器中使用它,首先需要在控制器工厂函数上注入sessionFactory;然后对它使用checkSession方法。在内部。然后该方法将返回数据。

控制器

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