我想按照数据中定义的延迟延迟数据流:
Rx.Observable.from([
{message: "one", delay: 100},
{message: "two", delay: 500},
{message: "three", delay: 10500}
]).subscribe((e) => console.log(e.message))
如何定义rxjs 5调度程序来实现它?
答案 0 :(得分:4)
根据您想要延迟的 ,您可以选择几条路线:
使用.concatMap
每次排放必须等待延迟的先前排放在下一次排放之前完成:
Rx.Observable.from([
{message: "one", delay: 500},
{message: "two", delay: 500},
{message: "three", delay: 500}
])
.concatMap(val => Rx.Observable.of(val.message).delay(val.delay))
.subscribe(val => console.log(val))
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>
每次排放都在前一次完成后到达。
使用.mergeMap
所有排放将在抵达时开始,并且延迟将在那时开始。
Rx.Observable.from([
{message: "one", delay: 500},
{message: "two", delay: 500},
{message: "three", delay: 500}
])
.mergeMap(val => Rx.Observable.of(val.message).delay(val.delay))
.subscribe(val => console.log(val))
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.3/Rx.js"></script>
请注意,所有三种排放都会同时到达。
通过使用标准Rx运算符,您可以获得取消支持。只需取消订阅流即可忽略所有待处理的未来排放。