拒绝在$ $资源的$ update函数中延迟

时间:2015-07-13 13:40:00

标签: javascript angularjs angular-promise angular-resource

在我的角度应用程序中,我按如下方式更新任务

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);,你会告诉棱角分明,一切都很好,对吗?

1 个答案:

答案 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将透明地跟随它,这意味着不会为此类响应调用错误回调。