如何解决为什么 publish() / connect() 与 of() 一起工作但不适用于自定义主题?
以下代码按我的预期工作。
1 秒后打印:1000
const { of } = require('rxjs');
const { publish } = require('rxjs/operators');
const source = of(1000);
const connectable = source.pipe(publish());
connectable.subscribe((v)=>console.log(v))
setTimeout(() => {
connectable.connect();
},1000);
但是以下(我使用主题的地方)没有打印任何内容:
const { Subject } = require('rxjs');
const { publish } = require('rxjs/operators');
const source = new Subject();//Custom subject
const connectable = source.asObservable().pipe(publish());
source.next(1000);
connectable.subscribe((v)=>console.log(v))
setTimeout(() => {
connectable.connect();
},1000);
如果我在 source.next()
之后直接移动 new Subject()
,也会发生同样的情况
为什么我在第二种情况下看不到任何打印内容?
解决方法
这两个例子有很大的不同(当然你的自定义主题可能是另一个)。
创建方法 of(1000)
将创建一个 Observable,当您订阅它时,它会发出一个 next
的发射,其值为 1000
(然后是 complete
).
调用 source.next(1000)
将立即将一个 next
发射与价值 1000
推下链。但是,在您的示例中,此时没有人在听,因为您在那之后订阅,因此它永远不会打印任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。