假设我有一个相当典型的rx使用,每当有一些更改事件发生时就会发出请求(我用.NET风格写这个,但我真的在想Javascript):
myChanges
.Throttle(200)
.Select(async data => {
await someLongRunningWriteRequest(data);
})
如果请求的时间超过200毫秒,则有可能在旧请求完成之前开始新请求 - 甚至可能是新请求首先完成。
如何同步?
请注意,这与多线程无关,这是我唯一可以找到关于何时使用Google搜索“rx同步”或类似内容的信息。
答案 0 :(得分:1)
您可以使用concatMap operator,只有在上一个项目完成后才开始处理下一个项目。
以下示例显示events$
的间隔为200毫秒,然后以不同的持续时间连续处理:
const { Observable } = Rx;
const fakeWriteRequest = data => {
console.log('started working on: ', data);
return Observable.of(data).delay(Math.random() * 2000);
}
const events$ = Observable.interval(200);
events$.take(10)
.concatMap(i => fakeWriteRequest(i))
.subscribe(e => console.log(e));

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