- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Angular 的英雄之旅教程中,作者为 http 服务 (hero-service) 编写了一个错误处理程序。我很困惑为什么作者选择将错误处理程序的错误参数类型设为 any,而在其他关于 http 客户端的 Angular 文档中,错误处理程序类型总是指定为 httperrorresponse 类型。
这是英雄之旅教程中的错误处理程序:https://angular.io/tutorial/toh-pt6#error-handling
private handleError<T> (operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
// TODO: send the error to remote logging infrastructure
console.error(error); // log to console instead
// TODO: better job of transforming error for user consumption
this.log(`${operation} failed: ${error.message}`);
// Let the app keep running by returning an empty result.
return of(result as T);
};
}
这是 Angular 的 httpclient 文档中提供的错误处理程序示例 https://angular.io/guide/http#getting-error-details
private handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// return an observable with a user-facing error message
return throwError(
'Something bad happened; please try again later.');
};
可以看到这里错误参数类型被指定为HttpErrorResponse。什么时候应该将错误参数输入为 any,什么时候应该更具体?
此外,如果我只是让 handleError 函数接受一个未类型化的参数:
handleError(error){
}
这和做有什么不同吗
handleError(error: Any){
}
最佳答案
RXJS 中的错误总是any
类型。链中的任何运算符(operator)都完全有可能抛出任何类型的错误。所以向下转换为 HttpErrorResponse
有点不安全,但它是允许的。
如果您只将 HttpClient 直接连接到此错误处理程序,那么它将是安全的。但是,有人可以添加某种自定义运算符(也许未找到从响应缓存中获取的运算符),并且该运算符可能会引发其他一些错误。这会导致运行时异常。
通常的最终结果是您最终隐藏了一个错误。早期运算符中的错误会导致错误。然后这个错误被这个处理程序捕获,它会遇到另一个错误,因为它不是一个 http 响应错误。只有第二个错误会打印到控制台。
因此,最好接受 any
并确保它是您想要彻底处理的异常类型。但如果您愿意冒险,也可以接受更窄的类型。
我不知道为什么作者选择做不同的事情,但第一个处理程序非常通用,除了打印错误对象外没有对错误对象做任何事情,所以向下转型没有任何优势。第二个可能只是试图通过向下转换而不显示额外的检查来简洁。
关于angular - 为什么 Angular 的英雄之旅 http 错误处理程序接受任何类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782951/
我正在关注 Angular 的 Tour of Heroes Tutorial我现在正在尝试将 observables 集成到我的项目中。将我的 hero.service.ts 文件更改为如下所示后
我正在关注 Angular 的 Tour of Heroes Tutorial我现在正在尝试将 observables 集成到我的项目中。将我的 hero.service.ts 文件更改为如下所示后
新一期王者荣耀登录礼包 免费领取三天皮肤+英雄 这是最新一期的活动 登录游戏即可获得共四次抽奖机会 有一定概率可中永久皮肤 经常玩游戏的可以领两天玩玩 活动地址:http://t.cn/A
我正在尝试制作一个网站,但我遇到了一个问题。我有一张图片,我需要它始终填满整个屏幕。就像他们在这个网站上所做的那样:http://mollyandmepecans.com这是我的网站:https://
我试图让 slider 上的图像在容器内全宽显示。我试过分离英雄文本 div,但它仍然不起作用。我多年来一直坚持这个,并意识到它可能是愚蠢的,所以堆栈溢出是我最后的选择。请参阅下面的代码和显示方式的图
我看过 Heroku 的 Taps 项目 ( http://devcenter.heroku.com/articles/taps )但是外键有很大的限制,所以我不太愿意使用它。 我想做的就是安全地获取
我正在运行 Angular 教程,但我无法理解某一部分实际发生的情况。我通过搜索找到了一些例子,但没有具体回答这个问题。这是代码: getHeroes (): Observable { retur
我正在运行 Angular 教程,但我无法理解某一部分实际发生的情况。我通过搜索找到了一些例子,但没有具体回答这个问题。这是代码: getHeroes (): Observable { retur
一位客户表示,他们非常喜欢 Google Play 处理他们的英雄 slider 的方式。我试过在 jQueryCycle 中复制效果,但无济于事。谁能阐明实现相同效果的最佳方法? 对于那些不熟悉的人
我正在做 Angular2 英雄之旅项目 https://angular.io/docs/ts/latest/tutorial/toh-pt2.html. {{hero.name}} 这里我可以使用下
我运行了 google page speed,它说我应该 Gzip 我的 javascript 文件? 我如何 gzip 我的 javascript 文件?如果有问题,我的网站托管在 heroku 上
前几天我将我的 Rails 4.1.7 应用程序发布到 Heroku 中,CSS 似乎工作正常。 但 javascript 文件部分响应。我有一个警报(“在 Charts-other.js 中”);
我不太熟悉 jQuery 和/或 JavaScript,但我正在尝试使用 Hero Slider对于我正在构建的网站。我几乎修改了代码来执行我想要的操作,但由于某种原因,第一张幻灯片似乎无法加载。奇怪
我正在学习着名的 Angular 教程,英雄之旅,但我正在努力迈出一步。 关于 sixth course, HTTP ,我们正在使用一种工具来模拟对 API 的 API 调用。 我想我遵循了所有步骤,
因此,我通常不会在将应用程序部署到 heroku 时遇到任何问题,但是,在这种特定情况下,我会遇到预编译失败错误... 这里的这一行对我来说很突出: remote: NoMethodEr
好吧,只是对这个发疯。 我在之前的 mx.datagrid 中使用了 rowcount 现在,使用“s:datagrid”,我尝试使用 requesteMaxRowCount 和 RequestMin
环境:Angular 5+ 来源:https://angular.io/tutorial 在 heroes.component.ts 类中有一个带冒号的赋值,如下所示: export class He
flask 应用程序可以在本地主机上正常登录和注册。但是当我把它推到 heroku 时,这就成了一个问题。它显示了上述错误。这是 app.py 代码 from flask import Flask,
我是一名优秀的程序员,十分优秀!