You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 12报错'source.subscribe is not a function'如何解决?

错误原因
  • 核心问题出在auth.service.ts中authStatus的定义:asObservable是BehaviorSubject实例的方法,你没有加调用括号,直接把方法本身赋值给了authStatus,而非方法执行后返回的可观察对象(Observable)。
  • 后续组件中你把authStatus当成方法调用,即使能拿到返回值,也会因为方法调用时this指向丢失,无法正确返回Observable实例,最终调用subscribe时就会抛出source.subscribe is not a function的错误。
修复方案

第一步:修改auth.service.ts代码

把authStatus的赋值改为调用asObservable()方法后的结果:

private loggedIn = new BehaviorSubject<boolean>(this.token.loggedIn())
// 这里加调用括号,直接保存Observable实例
authStatus = this.loggedIn.asObservable()

changeAuthStatus(value: boolean){
  this.loggedIn.next(value)
}

第二步:修改组件调用代码

现在authStatus已经是Observable实例,不需要加括号调用,直接订阅即可:

public loggedIn: any;

constructor(
  private Auth: AuthService
) { }

ngOnInit(): void {
  // 去掉authStatus后面的调用括号
  this.Auth.authStatus.subscribe((value) => {
    this.loggedIn = value
  });
}
补充说明

RxJS中只有Observable类型的实例才拥有subscribe方法,出现该报错时优先检查你调用subscribe的对象是否为合法的Observable实例,常见的触发场景包括:

  • 忘记调用返回Observable的方法,直接对方法本身订阅
  • 异步操作还没完成,就对未赋值的变量订阅
  • 方法返回的是Promise、普通对象等非Observable类型

内容的提问来源于stack exchange,提问作者dcrox12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:45:00