首页 > 解决方案 > 未捕获(承诺中):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);
                });

        });
    }

任何人都可以建议我可能是什么问题?

标签: angular

解决方案


推荐阅读