Angular无法读取属性'订阅'为null

时间:2016-11-10 13:21:39

标签: angular observable

我收到错误

  

无法阅读财产'订阅' 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();

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

发生此错误是因为可观察的/服务功能为null或返回null。

因此无论先初始化它。

例如

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

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

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