0
在我的角度应用$更新功能递延我更新任务如下
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
方法做,使得第二回调叫什么名字?
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);
你告诉角度说,一切都很好,对不对?
我已经试过你的suggesion [这里](http://jsfiddle.net/3PUxx/78/)和它的作品。但在我的应用程序中,第一个回调仍然被调用。在我的应用程序的一个HTTP状态代码'422',它可以是它与此有关。凡德的文档中描述了它是如何决定哪个回调被调用?也许可以定义你自己的'$ update'功能? –
我也发现了[这](http://stackoverflow.com/questions/18907117/angular-resource-not-invoking-my-error-callback-function)后,它使用拦截器来拒绝回应?! “4XX”响应真的需要吗? –
$ resource使用$ http,因此$ http的文档适用: > 200到299之间的响应状态代码被视为成功状态,并且会导致调用成功回调。因此,任何> = 400(不重定向)都会触发错误回调。 如果您想要定义一个针对所有请求调用的回调函数,则只需要一个拦截器。拦截器将在$ resource方法中的回调定义之前运行。 –