【发布时间】:2016-03-10 21:00:11
【问题描述】:
我遇到了一个问题,$http Promise 没有从执行它的服务冒泡到调用服务方法的任何地方。
我在服务中有一个.authozire() 方法返回$http Promise,如下:
// auth.service.js
function authorize(authParams) {
var request = {
method: 'POST',
url: _apiUrl + 'oauth/token',
data: authParams
};
return $http(request)
.then(
function successHandler(response) {
// Correctly executed when success
$log.debug('authService :: authorize => success', response);
},
function errorHandler(response) {
// Correctly executed when error
$log.debug('authService :: authorize => error', response);
}
);
}
上面的 success 和 error 方法(请不要说我已经不使用 .success() 和 .error() 方法,因为它们已被弃用)在每种情况下都可以正常工作,但它不起作用当我从控制器调用此方法时,正如预期的那样:
// signin.controller.js
function submit() {
authService.authorize(vm.formData)
.then(
function successHandler(response) {
// Always executed even when there's an error
$log.debug('SignInController :: submit :: authService.authorize() => success', response);
},
function errorHandler(response) {
// NEVER executed
$log.debug('SignInController :: submit :: authService.authorize() => error', response);
}
);
}
第一个方法successHandler 总是被调用,即使出现错误并且服务执行了自己的errorHandler。
服务返回的 Promise 似乎只是一个简单的 Promise,它接受 .then(),但不区分 success 和 fail,如文档中所述:
所以...我错过了什么吗?以前有人遇到过这样的问题吗?
谢谢!
【问题讨论】:
-
您确定将其附加到服务中返回的对象上吗?即 var service = {}; service.submit = 提交;
-
@Katana24:是的,所有内容都根据需要附加并且执行得很好,除非出现错误。在服务中:
service = {authorize: authorise}; return service;在控制器中:vm.submit = submit;
标签: javascript angularjs