如何在angular http请求的错误和成功回调之间共享变量
How to share a variable between error and success callback of angular http request
我想在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);
});
});
相关文章:
- 成功回调永远不会被JSONP请求调用
- 查询后websql成功回调无法访问变量
- 在$q服务中捕获拒绝而不触发成功回调
- 如何从ajax成功回调函数中读取javascript变量
- AJAX成功回调-执行javascript时出现问题
- 当使用命名函数作为jquery ajax成功回调时,我需要括号吗
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- Yii ajaxbutton : 如何在成功回调函数中获取 $(this)
- 角承诺的“then”函数的成功回调的词汇范围是什么?
- 承诺中的成功回调不会发生$http
- Ajax成功回调仅适用于Chrome
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- 成功回调中的外部变量未正确更新
- 为什么jQuery成功回调有时有3个参数,有时只有1个
- 当通过Ajax成功回调更新可观察数组时,启用绑定中断
- 构建Ajax调用数组时,JQueryAjax成功回调不起作用
- JQuery AJAX没有't获得成功回调功能
- 如何访问作为参数发送到jquerypost的成功回调中的数据值
- 成功回调不是一个函数
- AngularJS$http.获取当时和成功回调之间的区别