我正在使用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
值的方法
现在我要求的是accumulated
运算符发出时scan
运算符中的debounceTime
值无效。
任何提示?
答案 0 :(得分:2)
使用.bufferTime(2000)
可能更容易让所有更改每2秒累积和传播一次,而不是手动执行此操作?
如果您希望将去抖退避与常规buffer()
结合使用,您还可以执行以下操作:
const source = this.action.ofType(UPDATE); source
.buffer(source.debounceTime(2000))
.switchMap(buffer => update(buffer)
.mapTo(new UpdateStoreAction(data))
);
这样,所有操作都会被缓冲,直到源在发出缓冲区之前静默2秒。