首页 > 解决方案 > Angular 8:嵌套服务依赖导致未定义

问题描述

我有一个单例服务 (A),它依赖于另一个单例服务 (B)。

在 A 的构造函数中,当我尝试获取 B 的属性时,我得到一个TypeError: this.B is undefined.

在 B 的构造函数中,我通过另一个服务进行后端调用。后端调用似乎导致某些东西中断或停止,并使 B 无法被其他服务文件识别。

代码示例:

// A Singleton Service. Relies on B.
@Injectable({
  providedIn: 'root'
})
export class Aservice {
  constructor(private service: Bservice) {
    console.log('B isLoggedIn', this.service.isLoggedIn); // <-- triggers TypeError
  }
}
// B Singleton Service
@Injectable({
  providedIn: 'root'
})
export class Bservice {
  isLoggedIn: boolean = false;

  constructor(private service: Cservice) {
    this.getData();
  }

  getData() {
    this.service.getSomeObject().subscribe(
      result => {
        console.log('B got result', result);
      },
      err => {
        console.error('B got ERROR', err);
      }
    );
  }
}
// C Singleton Service
@Injectable({
  providedIn: 'root'
})
export class Cservice {
  constructor(private http: HttpClient) {}

  getSomeObject() {
    return this.http.get('my/api/path');
  }
}

当然,我以更复杂的方式使用它,但我发现即使只是尝试从 A 访问 B 中定义的变量也会导致 TypeError。

这是出乎意料的,我无法弄清楚为什么this.B is undefined

标签: angularserviceasync-awaitrxjssingleton

解决方案


推荐阅读