我想在服务器返回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中创建一些内容? 谢谢!
答案 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();
}