【问题标题】:Angular Cannot read property 'subscribe' of nullAngular 无法读取 null 的属性“订阅”
【发布时间】:2016-11-10 13:21:39
【问题描述】:

我收到了错误

无法读取 null 的“订阅”属性。

这是发生错误的地方,这是由其类的构造函数调用的:

loadItems() {
    this.itemService.subscribeItems().subscribe(x => {
      this.items = x;
      console.log(x);
    });
}

它调用了这个服务方法,这就是我认为的问题所在。可能与return null有关

subscribeItems(): Observable<Item[]> {
    this.session.uid.subscribe(x => {
            return this.af.database.list('users/' + x + '/Items')
            .map(Item.fromJsonList);
    });
    return null;
}

会话服务持有用户登录时更新的 uid: 这部分工作正常。

_uid = new BehaviorSubject<string>('');
uid = this._uid.asObservable();

【问题讨论】:

  • 尝试删除return null;
  • 我试过了。我尝试创建一个可观察类型的本地变量并在最后返回。而不是我刚刚分配给该变量的内部返回。然而还是不行
  • 如果它对任何人有帮助,当我忘记在 Validators.compose([...]) 声明中包装 Validators.compose([...]) 中的验证器时,我在文本输入中的“key up”上收到此错误

标签: angular observable


【解决方案1】:

试试这个:

subscribeItems(): Observable<Item[]> {
    return this.session.uid.subscribe(x => {
            return this.af.database.list('users/' + x + '/Items')
            .map(Item.fromJsonList => Item.fromJsonList.json());
    });
    return null;
}

【讨论】:

  • 类型订阅不可分配给类型 Observable
  • 返回的内容与 Observable 条件不匹配 尝试删除此内容,查看控制台日志显示的内容
  • this.session.uid.subscribe 返回一个字符串。这用于获取用于查询内部数据库的uid。当用户登录时,此 uid 发生变化,并将触发内部再次使用 x 变量运行以返回该用户的正确项目。
  • 您的问题已得到回答,您现在得到了一些回报,为什么不能分配给 Observable 是一个需要更多详细信息的新问题,因为很可能您在代码中省略了 .json 之类的内容() 在您的地图上
【解决方案2】:

发生此错误是因为 observable/a 服务函数为 null 或返回 null。

所以无论哪个先初始化它。

例如

Items():Observable<any>
{ 
   let itemToReturn = new Observable();

   if(this.itemService.subscribeItems()){
       this.itemService.subscribeItems().subscribe(data => itemToReturn.next(data)); 
   }
   return itemToReturn; 
}

调用或订阅该方法不会出错,因为它总是返回一个已初始化的项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2018-02-13
    • 2019-10-11
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多