Har*_*uka 6 typescript zone.js angular
这是我在httpService.ts中的代码
public HttpPost(url: string, data: any): Observable<Response>
{
let headers = new Headers();
let reqOpts = new RequestOptions();
headers.append(AUTH_CONTENT_TYPE_KEY, AUTH_CONTENT_TYPE);
if (this.Token) {
headers.append(AUTH_HEADER_KEY, AUTH_TOKEN_PREFIX + this.Token);
}
reqOpts.headers = headers;
return this.http.post(url, data, reqOpts).timeout(30000).map((res: Response) => res)
.catch((err: Response) => { return Observable.throw(err) });
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用此服务以这种方式调用API:
this.httpService.HttpPost(url, data).subscribe(
(res: any) =>
{
// do something
},
(error: any) =>
{
if (error.status === 409)
// do something
else if (error.status === 401)
// do something
else
// do something
}
);
Run Code Online (Sandbox Code Playgroud)
如果res状态代码不是200,例如401、403或409,则控制台中的zone.js会生成此类烦人的错误。(对不起,API的隐藏部分网址)
所以无论如何都可以停止zone.js在控制台中生成这种烦人的错误,尝试用Google搜索示例示例的解决方案,但尚未找到,谢谢!
试图在main.ts中使用它,但是没有用:
window.console.error = function() {};
Run Code Online (Sandbox Code Playgroud)
编辑:添加堆栈跟踪:
当网络请求失败时,Chrome会在控制台中显示错误。该错误会显示失败的网址,收到的HTTP状态以及请求的来源。通常,在Angular中,您是在响应用户的某些操作而发出HTTP请求。Angular使用zone捕获这些动作,因此几乎所有错误的根源都是zone.js。但是,如果检查整个堆栈跟踪,则会看到在调用您自己的代码之后发生了错误。只是代码zone.js最终调用了该代码。
因此,在控制台中看不到请求错误的唯一方法是将chrome控制台配置为忽略它们,但我认为没有编程的方式可以做到这一点。
我确定您正在考虑window.onerror,从理论上讲,它捕获了任何未捕获的异常。但是这些网络错误不是JavaScript异常,因此您将无法捕获它们。
我不会取代console.error。因为如果这样做,您将看不到代码中可能存在的真正错误。无论如何,如上所述,在这种情况下是Chrome正在向控制台写入数据,而正如我已经说过的那样,隐藏这些错误的唯一方法就是对它们进行过滤(但是,它只会对您有用)。
在开发模式下,您可以添加以下行以在 src/environments/environment.ts
import `zone.js/dist/zone-error`;
Run Code Online (Sandbox Code Playgroud)
然后大多数与区域相关的错误堆栈跟踪将消失。
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |