我希望采用像这样的 Observable 发出的一系列值Rx.Observable.of(["add", "edit", "destroy"]),但我希望每个值每 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);
Run Code Online (Sandbox Code Playgroud)
但似乎有一种方法可以做到这一点而无需挥手。我如何在不使用的情况下做到这一点setTimeout()?
使用 RxJS 有很多方法可以做到这一点。
一种方法是创建一个intervalobservable 并zip在每次intervalobservable 发出时将它与发出一个名称一起使用。
zip只要每个都发出了一个值,操作符就会合并它所传递的可观察量的发射。此处使用可选的选择器来忽略intervalobservable发出的增量整数。
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));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>Run Code Online (Sandbox Code Playgroud)
我已经缩短了时间间隔,500因为我不耐烦。
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |