RxJS-重用已完成的可观察对象

时间:2019-02-23 08:54:03

标签: rxjs

Link to code in stackblitz

有没有办法重复完成一个可观察的多次?

说我有一个按钮,单击该按钮可创建一个可观察的间隔,该间隔发出10个值,然后完成:

fromEvent(button, 'click').pipe(
    switchMapTo(interval(500)),
    takeWhile(i => i < 10)
)

在订阅中,我要处理下一个和完整的方法:

.subscribe(
    i => console.log(i),
    () => {},
    () => console.log('completed')
);

通过这种方式-第一次点击将发出一个序列,一旦完成,后续的点击将不再发出。有什么办法写这个,使所有的点击都发出序列?

1 个答案:

答案 0 :(得分:1)

我认为您应该完成内部可观察到的而不是整个序列。 (takeWhile应通过管道传递到interval);

仅当您愿意在新的点击事件出现后就退出旧序列时才应使用switchMap。否则mergeMapconcatMap

const sequence = () => interval(500).pipe(take(10));

fromEvent(button, 'click').pipe(
    switchMap(sequence),
)