如何解决RxJs,subscriptionAnotherBehaviorSubjectvs subscriptionelem=> AnotherSubject.nextelem
在角度9中,我注入了一个http
对象,我称之为get with并订阅响应。
像下面的
somethingElse = new BehaviorSubject<Tweet[]>([]);
http.get<Tweet[]>('/api/bla').subscribe(tweets => somethingElse.next(tweets);
看一下Observable
的API规范,就可以看到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);
在后一种情况下,均不会调用回调。有什么问题吗?
解决方法
行为主体既是可观察者,又是观察者。如果您在订阅中使用它,请记住您还会传递一个完成的http调用,当它们发出时,它会完成,因此这也将完成行为主题。
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);
,它会在未定义的异常上抛出无法找到的长度。我想这是一个绑定问题,其中方法现在绑定到了新的可观察对象,而没有此绑定的权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。