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

Vit*_*vzh 2 rxjs typescript ngrx angular

我正在尝试在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)})
    );
Run Code Online (Sandbox Code Playgroud)

基本上,我要实现的是某种setTimeout()功能,但仅包含操作。

通常,任务听起来像这样:一旦收到来自服务器的推送,我们需要显示一些图标,并在一定时间后将其隐藏。时间量来自服务器。

我将不胜感激有关如何参数化delay()输入参数的任何建议,以及有关在这种情况下为何延迟采用先前值的任何解释。

谢谢!

Noé*_*aün 5

您可以使用mergeMap运算符

myObs$.pipe(
  mergeMap(payload => {
    return of(payload)
      .pipe(delay(payload.delay))
  })
);
Run Code Online (Sandbox Code Playgroud)