安全中断404/401服务器状态响应

时间:2016-10-22 00:14:30

标签: javascript angularjs ionic-framework angular-promise

我想在服务器返回404或401时显示一条消息。

这是我的结构:

ultimasOperacionesController - > ultimasOperacionesService - > remoteDataService

ultimasOperacionesController :致电该服务。

ultimasOperacionesService :调用remoteDataService。

remoteDataService :调用服务器(使用404的服务器响应)。

所以这是我要求的代码部分:

控制器

function cargarUltimasOperacionesComplejo() {

       ultimasOperacionesService.obtenerUltimasOperacionesComplejo()
            .then(function(ultimasOperaciones) {
                vm.ultimasOperaciones = ultimasOperaciones;
            })
            .catch(mostrarError);
    }


    function mostrarError(e) {
        //HERE I WANT TO MAKE SOMETHING TO SHOW A IMAGE TELLING TO THE USER THAT WAS NOT POSSIBLE CONNECT TO THE SERVER.
    }

服务

//funcion para obtener las últimas operaciones
    function obtenerUltimasOperacionesComplejo() {
        remoteDataService.obtenerUltimasOperacionesComplejo()
         .then(function(ultimasOperaciones) {
                return ultimasOperaciones;
            })
            .catch(mostrarError);

    }

    function mostrarError() {
        debugger;
         return $q.reject('Ups! Hubo un problema al conectarse al servidor. Intente nuevamente');
    }

RemoteDataService

function obtenerUltimasOperacionesComplejo() { 
        debugger;
        return $http
            .get(ultimasOperacionesUrl,
                 {params: {idComplejo: 1}})
            .then(function(response) {
            debugger;
                var datos = response.data;
                var status = response.status;

                if(status == 200){   
                    var exito = datos.success;

                    if(exito == 0){
                        return $q.reject(datos);
                    }
                    else if(exito == 1){
                        ultimasOperaciones = datos.ultimasOperaciones;
                        return ultimasOperaciones;
                    }
                }    
            })
            .catch(generarError);
    }

    function generarError(e){
        debugger;
        if (e.message) {
            return $q.reject(e.message);
        }
        return $q.reject('Ups! Hubo un problema al conectarse al servidor. Intente nuevamente');
    }

当我调试它时,服务响应为404,然后启动函数“generarError”进入remoteDataService。

最后,将函数“generarError”启动到UltimasOperacionesService中,之后:没有任何反应:控制器中的函数“mostrarError”从未调用过。

此外,我在控制台中出现以下错误:

  

TypeError:无法读取未定义的属性'then'       at cargarUltimasOperacionesComplejo(ultimasoperaciones.controller.js:25)

在另一篇文章中有人告诉我,这是因为在某些功能中我什么都没有回来。

如何让错误到达控制器,之后我可以在HTML中创建一些内容? 谢谢!

1 个答案:

答案 0 :(得分:0)

  

TypeError:无法读取属性'然后'未定义的   cargarUltimasOperacionesComplejo(ultimasoperaciones.controller.js:25)

因为ultimasOperacionesService返回$ q.reject()或数据仅在解析remoteDataService promise时(它不是同步操作)并且在其值保持未定义之前,所以ultimasOperacionesService.obtenerUltimasOperacionesComplejo()不是您可以通过.then()或catch()处理的承诺。

如果您需要在控制器中处理承诺,那么您必须从ultimasOperacionesService返回承诺。

像这样:

//funcion para obtener las últimas operaciones
    function obtenerUltimasOperacionesComplejo() {
        return remoteDataService.obtenerUltimasOperacionesComplejo();

    }