如何使用RXjs随时间推出一组值?

时间:2017-04-01 23:35:59

标签: javascript rxjs

我正在寻找像这样的Rx.Observable.of(["add", "edit", "destroy"])这样的Observable发出的一系列值,但我希望每5秒钟发出一次这样的值。

目前,我使用setTimer()Subject这样伪装。

const actions$ = new Rx.Subject();

setTimeout(() => { actions$.next("add");  }, 5 * 1000);
setTimeout(() => { actions$.next("edit"); }, 10 * 1000);
setTimeout(() => { actions$.next("destroy"); }, 15 * 1000);

但似乎有一种方法可以做到这一点,没有那么多的handwaving。如何在不使用setTimeout()的情况下执行此操作?

1 个答案:

答案 0 :(得分:4)

使用RxJS可以通过多种方式实现此目的。

一种方法是创建一个interval observable,并与zip一起使用,以便每次interval可观察时发出一个名称。

zip运算符合并每当发出一个值时它所传递的可观察量的发射。此处使用可选选择器来忽略interval observable发出的增量整数。



const names = Rx.Observable.from(["add", "edit", "destroy"]);
const interval = Rx.Observable.interval(500);
Rx.Observable
  .zip(names, interval, (name, i) => name)
  .subscribe(name => console.log(name));

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
&#13;
&#13;
&#13;

我已将间隔减少到500因为我不耐烦了。