首页 > 解决方案 > 行为主体的角度/rxjs对象不返回值

问题描述

我有一个商店服务,其中包含一个带有行为主题的对象,因此商店可以轻松增长和缩小。但是由于某种原因,使用这种方法我无法像往常一样使用 .value 访问器从 BehaviourSubject 获取值。

我可以像往常一样订阅主题,结果是正确的。

  private listStore: any = {};


  public getList<T>(key: string): GraphResponse<T> {

    if (this.listStore[key]) {
      return this.listStore[key].value; <--- This returns null event when there is a value there
    } else {
      return null;
    }
  }


  public list$<T>(key: string): Observable<T> {
    if (!this.listStore[key]) {
      this.listStore[key] = new BehaviorSubject<T>(null);
    }
    return this.listStore[key].asObservable(); <-- Subscribing to this at the same time works fine
  }

我尝试添加超时来测试 setter 是否可能比 getter 慢,并且它仍然返回 null。

控制台显示主题已按您的预期填充:

类别:BehaviorSubject {_isScalar:false,观察者:Array(0),关闭:false,isStopped:false,hasError:false,...} 实体:BehaviorSubject {_isScalar:false,观察者:Array(1),关闭:false,isStopped:假,有错误:假,...}

使用上述对象的示例:

我的商店里目前有这个对象:

let store = {
      test: new BehaviorSubject('testing 1 2 3'),
      another: new BehaviorSubject('another test!')
    }

现在,如果我这样做:

store.test.subscribe().... 它工作正常,我可以得到价值

但是,这样做:

store.test.value 返回 null

这只有在有一个行为对象的情况下才会发生

标签: angularrxjsobservablebehaviorsubject

解决方案


推荐阅读