javascript-在控制器内部调用$http promise
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在控制器内部调用$http promise,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2671字,纯文字阅读大概需要4分钟。
内容图文
![javascript-在控制器内部调用$http promise](/upload/InfoBanner/zyjiaocheng/683/11d8dfa9ead9414aabd40b92c9083c84.jpg)
先谢谢您的帮助…
我有一个用于调用API的控制器,用于发送密码重置链接.我已经将实际的$http调用抽象为一个服务,以使控制器变薄.本来我是在做这样的事情:
angular.module('module')
.service('forgotPasswordService', ['$http', function($http) {
$http(request).then(function() {
return {}; //return some object using response
}]);
我觉得这将是最好的方法,因为它将使控制器尽可能的薄,并使所有与服务相关的动作分开.我的问题是,从诺言中返回实际上并没有给我任何回报.我实际上必须返回$http服务调用才能获得承诺.我能够完成所有这些工作的唯一方法是,如果我从控制器内部调用.then.
//controller
angular.module('module')
.controller('forgotPasswordCtrl', ['forgotPasswordService', function(forgotPasswordService) {
forgotPasswordService.forgotPassword(emailAddress).then(function() {
//do stuff
}
}]);
//service
angular.module('module')
.service('forgotPasswordService', ['$http', function($http){
this.forgotPassword = function(emailAddress) {
return $http(request);
};
}]);
这对我来说有点不对劲,因为控制器现在依赖于从服务返回承诺.我可能只是想得太多,但我想提出第二点意见.
这被认为是可接受的/良好做法吗?是否有替代方法可以使我实现所需的封装?
再次感谢.
解决方法:
我以两种略有不同的方式与控制器的$http接口.
像您一样,从服务中返回$http并与之交互也感觉不对.
因此,首先我创建了服务,并传入了成功方法和错误方法(回调).
// Service
angular.module('module')
.service('forgotPasswordService', ['$http', function($http) {
function sendForgotPasswordEmail(emailAddress, success, error){
$http.post('/api/v1/resetpassword', {emailAddress:emailAddress})
.then(success, error);
}
return {
sendForgotPasswordEmail: sendForgotPasswordEmail
}
}]);
// Controller
angular.module('module')
.controller('forgotPasswordCtrl', ['forgotPasswordService', function(forgotPasswordService) {
forgotPasswordService.sendForgotPasswordEmail(emailAddress,
function(response){ //success
// notify user of success
},
function(response){ // error
// notify user of error
});
}]);
这很棒.我以这种方式创建了一个大型应用程序,但是当我开始第二个大型角度项目时,我想知道为什么我隐藏了$http的承诺?
通过传递承诺,我可以使用其他支持承诺的库.用我的第一种方法,我无法利用其他库承诺的支持.
传递$http承诺
// Service
angular.module('module')
.service('forgotPasswordService', ['$http', function($http) {
function sendForgotPasswordEmail(emailAddress){
return $http.post('/api/v1/resetpassword', {emailAddress:emailAddress});
}
return {
sendForgotPasswordEmail: sendForgotPasswordEmail
}
}]);
// Controller
angular.module('module')
.controller('forgotPasswordCtrl', ['forgotPasswordService', function(forgotPasswordService) {
forgotPasswordService.sendForgotPasswordEmail(emailAddress)
.then(
function(response){ //success
// notify user of success
},
function(response){ // error
// notify user of error
});
}]);
内容总结
以上是互联网集市为您收集整理的javascript-在控制器内部调用$http promise全部内容,希望文章能够帮你解决javascript-在控制器内部调用$http promise所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。