RxJs 使用 Scan n DebounceTime 对网络调用进行速率限制,使扫描累加器无效

RxJs using Scan and DebounceTime to rate limit network calls, Invalidate scan accumalator

我正在使用 ngrx 来维护我的应用程序中的状态。 我需要经常用当前应用程序状态更新服务器,但我不想让服务器不堪重负。

我的@effect 有点像

@Injectable()
class MyEffect {
    @Effect()
    effect = this.action.ofType(UPDATE)
        .scan(collectAllChanges,emptyValue)
        .debounceTime(2000)
        .switchMap(data => update(data).map(() => new UpdateStoreAction(data)));
}

CollectAllChanges 是一种采用最后的 accumulated 值和新的 changes 并构建新的 accumulated

的方法

现在我需要的是在 debounceTime 运算符发出时使 scan 运算符中的 accumulated 值无效。

有什么提示吗?

也许使用 .bufferTime(2000) 让所有更改每 2 秒累积和传播一次比手动执行此操作更容易?

如果你想将去抖回退与常规 buffer() 结合起来,你也可以这样做:

const source = this.action.ofType(UPDATE); source   
  .buffer(source.debounceTime(2000))   
  .switchMap(buffer => update(buffer)
    .mapTo(new UpdateStoreAction(data))
  );

这样所有的动作都会被缓冲,直到源在发出缓冲区之前安静 2 秒。