如何在 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))
  })
);