【发布时间】:2020-07-29 10:19:27
【问题描述】:
作为学习 rxjs 的一部分,我一直在使用 create 方法 of、from、interval 等来测试节流阀和 deboucne 等,我一直在使用 fromevent 创建流。
现在我有了一个真实的用例,我需要动态地将值添加到一个空的可观察流中。我找不到任何关于如何最好地做到这一点的例子,而不是使用上面的创建方法。目前,我使用 BehaviourSubject 使用 next() 将项目动态添加到流中。这是向流中动态添加新项目的最佳/首选方式吗?
例如
import { BehaviorSubject, timer } from 'rxjs';
import { tap, mapTo, concatMap, } from 'rxjs/operators';
const subject = new BehaviorSubject(1);
const example = subject.pipe(
concatMap(ev => timer(200).pipe(mapTo(ev))),
tap((ev) => console.log(ev))
)
example.subscribe();
// add a flurry of values dynamically
subject.next(2);
subject.next(3);
subject.next(4);
// some time later add some more
setTimeout(function(){
subject.next(5);
subject.next(6);
subject.next(7);
}, 5000);
https://stackblitz.com/edit/rxjs-behaviorsubject-simpleexample-gyrtw8?file=index.ts
谢谢
【问题讨论】:
-
这绝对是一种实现您想要的方式,但如果知道您的
function实际上是什么会很有趣,我的意思是嵌入在setTimeout中的function。如果setTimeout模拟某种基于callback的机制,则可能有其他方法。