AngularJS服务上保存未调用错误回调()方法(AngularJS service not in

2019-07-02 16:03发布

所以我使用angularjs RESTful服务$资源,我调用$保存功能。 然而,错误回调我传递给它不会被调用。 该服务器发送一个418错误,我想因为它不是200将导致被调用错误回调。 但是,这不可能发生。 我无法找到任何文件说明将导致错误回调哪些HTTP错误代码被调用。

这里是我的代码:

var modalScope = $scope.$new();
modalScope.showPassword = false;
modalScope.message = null;
modalScope.user = new User();

modalScope.submit = function(user) {
    user.$save( {}, function(data,headers) {
        // do the success case
    }, function(data,headers) {
        // do the error case                
    });
};

该modalScope.user被传递给定义的提交功能。 那么,什么是为什么这个错误回调不会被调用的问题?

Answer 1:

我发现在ngResource源代码如下

$http({method: 'GET', url: '/someUrl'}).
    success(function(data, status, headers, config) {
        // this callback will be called asynchronously
        // when the response is available
    }).
    error(function(data, status, headers, config) {
        // called asynchronously if an error occurs
        // or server returns response with status
        // code outside of the <200, 400) range
    });

我有点困惑的范围标识,但似乎它实际上应该调用错误方法。 也许你发现了一个bug。



Answer 2:

有同样的问题,并没有在这里工作。 原来我有一个自定义调试拦截未明确返回$ q.reject(响应)。

显然,每一个自定义调试拦截导弹完全覆盖的默认行为。

见https://github.com/angular/angular.js/issues/2609#issuecomment-44452795为在那里我找到了答案。



Answer 3:

我有错误回调麻烦为好,但现在看来,在新的版本AngularJS的,错误回调方法现在必须实现这样的:

SomeResource.query({}, angular.noop, function(response){
  $scope.status = response.status; 
});

来源+更详细的描述: https://groups.google.com/d/msg/angular/3Q-Ip95GViI/at8cF5LsMHwJ

此外,在回答关于Flek的文章的评论,似乎现在只有200和300之间的反应不被认为是一个错误。



Answer 4:

我不能让Alter公司的答复工作,但这个工作对我来说:

user.$save(function (user, headers) {
                    // Success
                    console.log("$save success " + JSON.stringify(user));
                }, function (error) {
                    // failure
                    console.log("$save failed " + JSON.stringify(error))
                });


Answer 5:

我是从拷贝ngResource文档 :

类对象或实例对象上的动作的方法可以用下面的参数来调用:

  • HTTP GET “类” 动作:Resource.action([参数],[成功],[错误])
  • 非GET “类” 动作:Resource.action([参数],POSTDATA,[成功],[错误])
  • 非GET实例动作:例如$行动([参数],[成功],[错误])

成功回调被调用(值,responseHeaders响应)参数。 错误回调被调用(类HTTPResponse)的说法。

$save被视为非GET“下课”的行动,所以你必须使用一个额外的postData参数。 使用同样的问题例如,这应该工作:

modalScope.submit = function(user) {
    user.$save( {}, {}, function(data,headers) {
        // do the success case
    }, function(response) {
        // do the error case                
    });
};

保持对错误回调的眼睛,用例相比,与只有一个参数调用,这使所有的HTTP响应。



Answer 6:

其实,如果我们遵循的文档。 有用

 User.save(vm.user, function (response) {
              FlashService.Success('Registration successful', true);
              $location.path('/login');
      },
      function (response) {

          FlashService.Error(response.data);
          vm.dataLoading = false;

      });

以上是从我的代码它的工作原理剪断。



文章来源: AngularJS service not invoking error callback on save() method