如何将异步错误处理放入单独的函数中?

共1个回答, 标签: angular typescript ionic4

我想将下面示例中显示的错误处理放入一个函数中:

从 “@ angular/core” 导入 {Injectable};
从 “@ angular/common/http” 导入 {http 拦截器、 HttpRequest 、 HttpHandler 、 http event};
从 “rxjs” 导入 {Observable};
从 “./auth.service” 导入 {AuthService};
从 “rxjs/运营商” 导入 {tap 、 flatMap 、 concatMap};
进口 {AlertController} 从 '@ 离子/angular';

@ 注射 ()
Export 拦截器实现了 http 拦截器 {

构造函数 (私有授权: AuthService,私有 alertCon: AlertController) {}

ErrorCodeToMessage = {
500: “发生了内部服务器错误。请与支持部门联系。”
404: “找不到这个资源。请与支持部门联系。”
403: “拒绝访问。你登录了吗?”
};

拦截 (htt: HttpRequest,next: HttpHandler): 可观察> {
如果 (req.url!= 这个.auth.LOGIN_URL & & req.url!= 这个.auth.registr_ url)
返回这个.auth.getToken ()
。管 (
(Token: string) => {
所需物品 = 所需物品的克隆 ({
SetHeaders: {
“授权”: 令牌
}
});
也可以全局处理错误
下一个返回。手柄 (req)。管道 (
轻按 (x => x,
异步 (错误) => {
康斯特警报 = 等候。 alertCon.create ({
标题: “错误”,
子标题: null,
消息: 此。错误代码错误信息 [错误。状态],
按钮: ['ok']
});

等到警报。本 ();
}
)
);
})
;
其他
下一个返回。手柄 (req)。管道 (
点击 (x => x,异步 (错误) => {
控制台日志 (“错误是:”);
控制台日志 (错误);
康斯特警报 = 等候。 alertCon.create ({
标题: “错误”,
子标题: null,
消息: 此。错误代码错误信息 [错误。状态],
按钮: ['ok']
});

等到警报。本 ();
})
);
}

}

然而,当我这样做时,注入的 AlertController 似乎不再可用。

从 “@ angular/core” 导入 {Injectable};
从 “@ angular/common/http” 导入 {http 拦截器、 HttpRequest 、 HttpHandler 、 http event};
从 “rxjs” 导入 {Observable};
从 “./auth.service” 导入 {AuthService};
从 “rxjs/运营商” 导入 {tap 、 flatMap 、 concatMap};
进口 {AlertController} 从 '@ 离子/angular';

@ 注射 ()
Export 拦截器实现了 http 拦截器 {

构造函数 (私有授权: AuthService,私有 alertCon: AlertController) {}

ErrorCodeToMessage = {
500: “发生了内部服务器错误。请与支持部门联系。”
404: “找不到这个资源。请与支持部门联系。”
403: “拒绝访问。你登录了吗?”
};


异步车把错误 (错误) {
控制台日志 (错误);
康斯特警报 = 等候。 alertCon.create ({
标题: “错误”,
子标题: null,
消息: 此。错误代码错误信息 [错误。状态],
按钮: ['ok']
});

等待警报。
第1个答案

如果您将错误处理程序设置为箭头函数,它应该将这个上下文,并允许您访问拦截方法内部注入的警报控制器。

HandleError = 异步 (错误: 任何) => {
控制台日志 (错误);
康斯特警报 = 等候。 alertCon.create ({
标题: “错误”,
子标题: null,
消息: 此。错误代码错误信息 [错误。状态],
按钮: ['ok']
});

等到警报。本 ();
}

相关问题

从 angularcli 中的 HTTP Get 请求检索到的数组的范围 如何将角2前置快速 JS 变量导出到角2分量? Angular block web 请求使用的服务器吗? 在类实例中跟踪状态 如何解决: “找不到规则 '@ typescript-eslint/一致类型断言' 的定义” 如何将月份值从一个日期对象复制到另一个日期对象?[复制] 如何将异步错误处理放入单独的函数中?