我正在寻找像这样的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()
的情况下执行此操作?
答案 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;
我已将间隔减少到500
因为我不耐烦了。