随着时间的推移,你如何使用 RXjs 发出一组值?

Mar*_*k B 1 javascript rxjs

我希望采用像这样的 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()

car*_*ant 5

使用 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因为我不耐烦。