如何在 Ngrx 效果中参数化 Rx delay() 函数?
How to parametrize Rx delay() function inside Ngrx effect?
我正在努力实现 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()
输入参数的任何建议,以及对于在这种情况下为何延迟采用先前值的任何解释,我将不胜感激。
谢谢!
您可以使用 mergeMap
运算符
myObs$.pipe(
mergeMap(payload => {
return of(payload)
.pipe(delay(payload.delay))
})
);
我正在努力实现 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()
输入参数的任何建议,以及对于在这种情况下为何延迟采用先前值的任何解释,我将不胜感激。
谢谢!
您可以使用 mergeMap
运算符
myObs$.pipe(
mergeMap(payload => {
return of(payload)
.pipe(delay(payload.delay))
})
);