如何在Ngrx效果中参数化Rx delay()函数?

时间:2018-03-09 21:32:35

标签: angular typescript rxjs ngrx

我试图在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()输入参数的任何建议,以及在此情况下延迟采用先前值的原因的任何解释。

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用mergeMap运算符

myObs$.pipe(
  mergeMap(payload => {
    return of(payload)
      .pipe(delay(payload.delay))
  })
);