在angular 9中,我注入了一个http对象,我用它调用get并订阅响应。如下所示
somethingElse = new BehaviorSubject<Tweet[]>([]);
http.get<Tweet[]>('/api/bla').subscribe(tweets => somethingElse.next(tweets);查看Observable的应用程序接口规范,可以看到subscribe(observer?: PartialObserver<T>): Subscription;。
太棒了,BehaviorSubject是PartialObserver (有next: (value: T) => void;方法)
那么为什么下面的方法不起作用呢?
somethingElse = new BehaviorSubject<Tweet[]>([]);
http.get<Tweet[]>('/api/bla').subscribe(somethingElse);
// NEITHER DOES THIS
// Should be semantically equal to the lambda above?
http.get<Tweet[]>('/api/bla').subscribe(somethingElse.next);在后两种情况下,都不会调用回调。问题是关于什么的?
发布于 2020-08-28 08:01:19
行为主体既是观察者又是观察者。如果您在订阅中使用它,请记住,当它们发出时,您还会传递一个complete,http调用complete,因此这也将完成behavior主题。
const { of, BehaviorSubject } = rxjs;
const bs$ = new BehaviorSubject('inital');
bs$.subscribe(val => console.log('First sub', val));
of('hello').subscribe(bs$); // of completes and also completes the behavior subject
bs$.subscribe(val => console.log('Sub after complete', val));
bs$.next('we are already complete');<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.2/rxjs.umd.min.js"></script>
至于http.get<Tweet[]>('/api/bla').subscribe(somethingElse.next);,它在未定义的异常中抛出一个无法找到长度的异常。我猜这是一个this绑定问题,方法现在被绑定到新的可观察对象,而它没有正确的这个绑定。
https://stackoverflow.com/questions/63623037
复制相似问题