在我的错误处理程序中,当我遇到错误时,我试图导航到另一个页面。
我尝试获取项目列表,如果失败,我想导航到“/error401”。我一直试图这样做:
UserTablecomponent:
export class UserDataSource extends DataSource<any>{
constructor(private authservice: AuthService) {
super();
}
connect(): any {
return this.authservice.GetInstallation();
}
disconnect() { }
}
这个电话可能有点奇怪。它所做的是调用其余的,看看我有什么基于令牌的ID。然后在下一次调用中使用该ID
授权服务
GetServiceProviderId(): Observable<Info> {
return this.http.get<Info>(this.rooturl + 'info', { headers: this.reqHeader });
}
GetInstallation(): Observable<Installation[]> {
return this.GetServiceProviderId().pipe(
flatMap(info => {
return this.http.get<Installation[]>
(this.rooturl +
"installation/?serviceproviderid=" +
info.ServiceProviderId,
{ headers: this.reqHeader })
}
), catchError(this.myerrorhandle.handleError))
}
}
迈勒手
@Injectable({
providedIn: 'root'
})
export class myerrorHandle {
constructor(public router: Router) { }
handleError(errorResponse: HttpErrorResponse) {
switch (errorResponse.status) {
case 401: {
this.router.navigate(["./error401"])
break;
}
default: {
console.log("todo");
break;
}
}
return throwError('an error was thrown');
}
}
这是我想导航到“/error401”的地方,但是
错误错误类型错误:无法读取未定义的属性“导航”
这是完整的错误日志:
错误类型错误:无法读取未定义的属性导航node_modules。/src/app/_esm5[作为选择器](node_modules)在_esm5。/_esm5/rxjs/_error/内部/运营商/_error(node_modules)在_esm5。/Subscriber.js.Subscriber.error/rxjs/Subscriber.js:60/内部/node_modulesMergeMapSubscriber.push.(_esm5)在_error。/OuterSubscriber.js.OuterSubscriber.notifyError/rxjs/OuterSubscriber.js:13/内部/node_modules(_esm5)在node_modules。/InnerSubscriber.push./rxjs/InnerSubscriber.js.InnerSubscriber./内部/_esm5InnerSubscriber.js:18(_error)在node_modules。/Subscriber.js.Subscriber.error/rxjs/Subscriber.js:60/内部/_esm5(node_modules)在_esm5。/MapSubscriber.push./rxjs/Subscriber.js.Subscriber./内部/node_modulesSubscriber.js:80(Subscriber.js:80)在FilterSubscriber.push.。/MapSubscriber.push./rxjs/Subscriber.js.Subscriber.error/内部/myerrorHandle.ts:18(CatchSubscriber.push.)在catchError.js.CatchSubscriber.error。/Subscriber.js:60/rxjs/FilterSubscriber.push./内部/catchError.js:33(MergeMapSubscriber.push.)在Subscriber.js.Subscriber.。/Subscriber.js.Subscriber./rxjs/CatchSubscriber.push./内部/Subscriber.js:80myerrorHandle.ts.myerrorHandle.handleError(MergeMapSubscriber.push.)
您需要在代码中使用箭头函数才能使用类上下文this
catchError(() => this.myerrorhandle.handleError));
正如@user184994所说:
将catchError更改为CATCHERRO((err)=
尝试使用< code>getAuth请求来存储令牌。请求不调用API并抛出错误。 TypeError:无法在HttpHeaders.push处读取undefined的属性(读取“length”)../node _ modules/@ angular/common/Fe sm5/http . js . http headers . apply update(http . js:199)at http
我试图使一个对话框弹出每当我得到一个错误从myerrorhandler我可以看到调用,但不是 这是我的错误消息。 错误类型错误:无法读取未定义的属性'openDialogTEST' 奇怪的是,如果我用按钮调用它,一切都很好。这是我的课程: usertable.component.ts auth.service.ts myerrorHandle.ts 对话框.component.ts 完整错误消息:
我的代码: 错误: 未处理PromisejectionWarning:TypeError:无法读取未定义的未处理PromisejectionWarning:未处理的promise拒绝的属性“forEach”。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。(拒绝id:1)(节点:7188)[DEP0018]弃用警告:未处理的promise
我想在我的角度项目中添加钢系列。我有createad html-compass组件,但我收到了这个错误: _services错误类型错误:无法读取未定义的属性(读取主题)在ProjectService…/app/Subject.js:53/_next(node_modules)在_esm5__tryOrUnsub[EventEmitter.push.](node_modules)在_esm5…/c
我收到错误: 错误类型错误: 无法读取在评估 (webpack-internal:///./node_modules/@angular/common/esm5/http.js:163) 处未定义的属性 “长度”在 Array.forEach () 在 httpHeaders.lazyInit (webpack-internal:///./node_modules/@angular/common/e
我正在选择area_enninFantry的所有子div,并循环调整某些子div的文本。cardArray是一个全局常量,myId在父函数中定义。 未捕获的TypeError:无法读取未定义的属性(读取“getAttribute”) 我在这篇文章中读到,这可能是因为字段/元素的内容可能是DOM元素,我应该用$()包装它们,所以我确实这样做了——将两个变量都更改为$(元素)[a]. attr(“标题