如何等待直到创建可观察的观察者

时间:2019-06-01 11:52:15

标签: angular typescript rxjs

我正在尝试使用Observable构建消息传递系统。我的代码看起来很简单。 但是我遇到了幻灯片问题,有时在创建 storageObserver 之前调用 newMessage 方法,并且出现此错误

  

无法读取null的属性“ next”

const std::vector<someType>&

很明显,我可以这样登录 newMessage

  private storageObserver: any;
  public storage: any;

  constructor(private auth: AuthenticationService, private http: HttpClient) 
  {
    this.storage = Observable.create(observer => {
      this.storageObserver = observer;
    });
  }

  newMessage(message: any) {
    this.storageObserver.next(message);
  }

但是我真的不喜欢这种类型的黑客。有什么适当的方法等到创建观察者吗?

1 个答案:

答案 0 :(得分:0)

我怀疑您希望能够长时间手动“喂食”可观察物,但是还有另一种方法可以做到这一点。

我更喜欢这样写:

private storageSubject: Subject<any>;

constructor(private auth: AuthenticationService, private http: HttpClient) {
    this.storageSubject = new Subject<any>();
    this.storage$ = this.storageSubject.asObservable(); 
}

// This is a public observable that can be subscribed to.
// Do not forget to unsubscribe.
storage$: Observable<any>;

newMessage(message: any) {
    this.storageSubject.next(message);
}

StackBlitz example

注意:如果希望可观察对象具有初始值,则可以使用BehaviorSubject<any>。订阅后,它总是会立即给出最后一个值,如果您希望该值具有某种形式的状态,则可能会更有用。