我正在尝试使用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);
}
但是我真的不喜欢这种类型的黑客。有什么适当的方法等到创建观察者吗?
答案 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);
}
注意:如果希望可观察对象具有初始值,则可以使用BehaviorSubject<any>
。订阅后,它总是会立即给出最后一个值,如果您希望该值具有某种形式的状态,则可能会更有用。