angular - 未捕获(承诺中):TypeError:无法读取 null 的属性“eso”
问题描述
我正在使用 App_Initializer 调用一项服务。在我的 app.module.ts 提供程序部分,我有 2 个 App_Initializer,如下所示:
//app.module.ts
{
provide: APP_INITIALIZER,
useFactory: (config: AppConfig) => () => config.load(),
deps: [AppConfig],
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: (config: AntiforgeryService) => () => config.Load(),
deps: [AntiforgeryService, GlobalService],
multi: true
}
//Load 方法在 AntoforgeryService 中如下所示
Load(): Promise<any> {
var date = new Date();
var sourceDate = date.getDate() + "*" + date.getDay() + "%" + date.getFullYear();
return new Promise((resolve, reject) => {
this.http.get(this.forgeryService + '/CMMService-service/GetAntiForgeryToken', { headers: new HttpHeaders().set('X-XSRF-KEY', 'GCMT-' + sourceDate) })
.map(res => res).catch((error: any) => {
return Observable.throw(error.json().error || 'TOKEN error');
}).subscribe((configResponse: any) => {
this.parseTokenData(configResponse);
resolve(true);
});
});
}
parseTokenData(data: any) {
debugger;
if (data!=null)
{
var result = JSON.parse(data.value);
this.cookieToken = result.CookieToken;
this.headerToken = result.HeaderToken;
this.globalService.cookieToken = this.cookieToken;
this.globalService.headerToken = this.headerToken;
}
}
当我从 app.module.ts 中的提供者中删除以下部分时,就没有问题了:
{
provide: APP_INITIALIZER,
useFactory: (config: AntiforgeryService) => () => config.Load(),
deps: [AntiforgeryService, GlobalService],
multi: true
}
在我的 AntiforgeryService 中,我还使用了名为 GlobalService 的服务之一。
我也在使用 AuthGuard,找到下面的 AuthGuard 代码:
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { GlobalService } from '../services/GlobalService';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private globalService: GlobalService) {
}
canActivate(): boolean {
debugger;
if (window.location.href.indexOf("localhost") == -1) {
return true;
}
return this.authService.handleAuthentication();
}
}
在 AuthGuard 中,我们有函数 handleAuthentication,在这个函数中,我们使用一个配置文件来获取 ESO 详细信息,如下所示:
public load() {
return new Promise((resolve, reject) => {
this.http.get('../config/config.json')
.map(res => res).catch((error: any) => {
return Observable.throw(error.json().error || 'Server error');
}).subscribe((configResponse: any) => {
debugger;
this.config = configResponse;
resolve(true);
});
});
}
任何人都可以建议我可能是什么问题?
解决方案
推荐阅读
- apache-spark - 无法找到具有用于启动缓存的数据存储配置的亲和服务器节点
- android - 将第 3 方库 .jar 文件实施到 android 模块中
- docker - Docker volume vs Kubernetes persistent volume
- sql-server - 关于 t-sql SUM func 的奇怪 ssms 结果,无法弄清楚
- ruby-on-rails - 当用户在 Devise 中注销时如何避免重定向?
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 1023 中的字节 0xe2:数据意外结束
- android - React-Native FlatList 在 Android 上不滚动
- c# - 如何动态创建按钮并添加不同的事件处理程序?
- formatting - 通过在 Eclipse CDT 中修改 AST 来停止代码格式化
- scala - 运行 sbt 时可以指定要编译的目录吗?