Restangular错误处理问题

sbo*_*uba 7 error-handling restangular

我有一个restangular的问题.这段代码:

Restangular.one("undefined_ressource").get().then(
    function(res){
        console.log("success", res.code);
    },
    function (res) {
        console.log("fail", res.code);
   }
);
Run Code Online (Sandbox Code Playgroud)

试图获取http://api.local.com/undefined_ressource不退出的网址.我的服务器按预期返回404,但永远不会触发失败日志.Intead它会成功回调并记录"success 404"到控制台.

Angular version 1.2.15
Restangular version 1.3.1
Run Code Online (Sandbox Code Playgroud)

任何帮助都会受到欢迎!谢谢

Pat*_*ini 15

改编自您的代码示例

Restangular.one("undefined_ressource").get().then(
    function(myObject){
        console.log("success obtained myObject");
    },
    function (res) {
        console.log("fail", res.status);
   }
);
Run Code Online (Sandbox Code Playgroud)
  • 如果Restangular调用成功:

然后应该调用第一个函数,它的参数应该是myObject.除非你的myObject有一个特定的代码或状态字段,否则Restangular不会添加任何代码或状态字段.

  • 如果Restangular调用失败:

然后应该调用第二个函数,它的参数是一个具有status,header,data,config字段的响应对象.不应该有任何可用的代码字段,如您的示例所示.

如果出现HTTP 404 Not Found异常,在我的导航器javascript控制台中我会获得:"fail"404

带错误拦截器

myAngularApp.run(['Restangular', '$window', function(Restangular, $window){
    Restangular.setErrorInterceptor(
        function(response) {
            if (response.status == 401) {
                console.log("Login required... ");
                $window.location.href='/login';
            } else if (response.status == 404) {
                console.log("Resource not available...");
            } else {
                console.log("Response received with HTTP error code: " + response.status );
            }
            return false; // stop the promise chain
        }
    );
}]);
Run Code Online (Sandbox Code Playgroud)

如果在您的角度应用程序myAngularApp上设置了错误拦截器,如上例所示,失败应该不再达到您的自定义调用,然后是第二个函数,但由errorInterceptor设置函数处理.

如果出现HTTP 404 Not Found异常,在我的导航器javascript控制台中我会获得:资源不可用...

经测试:

Angular version 1.2.14
Restangular version 1.3.1
Run Code Online (Sandbox Code Playgroud)