我试图在ngrx效果中实现可配置的延迟。但是,RxJS delay()
函数无法接收lambda作为参数,仅number | Date
。我尝试做的是tap
并将有效负载中的值存储到某个全局变量中,然后将其用作delay()
的参数,但它不起作用。似乎使用旧的变量值调用delay()
。以下是参考代码段:
@Effect()
delayHideRx$ = this.actions$
.ofType(IconsActions.DELAY_HIDE_RX)
.pipe(
tap((action: Action) => { rxDelay = action.payload }),
delay(rxDelay),
map(() => {console.log('delay hide rx'); return IconsActions.hideRx(rxDelay)})
);
基本上我想要实现的是setTimeout()
功能,但仅限于操作。
一般来说,任务听起来像这样:一旦我们从服务器接收到推送,我们需要显示一些图标并在一定时间后隐藏它。时间量来自服务器。
我将非常感谢有关如何参数化delay()
输入参数的任何建议,以及在此情况下延迟采用先前值的原因的任何解释。
谢谢!
答案 0 :(得分:4)
您可以使用mergeMap
运算符
myObs$.pipe(
mergeMap(payload => {
return of(payload)
.pipe(delay(payload.delay))
})
);