在我的角度应用程序中,我按如下方式更新任务
task.$update().then(function (task) {
// success
}, function (response) {
// failure
});
从后端我得到422
,但第一个回调被调用。
我的资源看起来像这样
angular.module('App')
.factory('Task', function ($resource) {
var resource = $resource('/admin/tasks/:id', { id: '@id' }, {
new: {
method: 'GET',
url: '/admin/tasks/new'
},
update: {
method: 'PUT'
},
...
});
return resource;
});
问题是,在哪种情况下第二个回调叫做?如果需要,我可以在update
方法中做什么,以便调用第二个回调?
更新:一直调用成功回调的原因是因为我有错误拦截器
angular
.module('App')
.factory('errorInterceptor', function ($location, $q, $rootScope) {
return {
responseError: function (response) {
if (response.config.url.match($location.$$host)) {
$rootScope.error = response;
return $q.reject(response);
}
return $q.when(response);
}
};
});
显然,如果你做return $q.when(response);
,你会告诉棱角分明,一切都很好,对吗?
答案 0 :(得分:1)
回调被指定为$ update()函数的参数,如下所示:
$task.$update(function(task) {}, function(response) {})
请参阅$resource的官方文档:
类对象或实例对象上的操作方法可以是 使用以下参数调用:
- HTTP GET“class”操作:Resource.action([parameters],[success],[error])
- 非GET“类”操作:Resource.action([parameters],postData,[success],[error])
- 非GET实例操作:实例。$ action([参数],[成功],[错误])
与$ http不同,$ update或任何资源方法都不会直接返回承诺。他们返回一个空引用。
请注意,$ resource在内部使用$http,因此$ http文档适用(关于回调):
200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。请注意,如果响应是重定向,XMLHttpRequest将透明地跟随它,这意味着不会为此类响应调用错误回调。