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 秒。
我正在使用 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 秒。