angular - ¿Cómo parametrizar la función Rx delay() dentro de un efecto de Ngrx?
Estoy intentando lograr un retraso configurable en un efecto de ngrx. Sin embargo, la función delay() de RxJS no puede recibir una lambda como parámetro, solo number | Date. Lo que estoy intentando hacer es usar tap y guardar el valor del payload en alguna variable global y luego usarlo como parámetro para delay(), pero no funciona. delay() parece ser llamado con el valor antiguo de la variable. Aquí está el fragmento de código como referencia:
@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)})
);
Básicamente, lo que estoy tratando de lograr es una especie de funcionalidad de setTimeout(), pero solo con acciones.
En general, la tarea suena así: Una vez que recibimos un push del servidor, necesitamos mostrar algún ícono y ocultarlo después de cierta cantidad de tiempo. La cantidad de tiempo proviene del servidor.
Apreciaré cualquier sugerencia sobre cómo parametrizar el parámetro de entrada de delay() y también cualquier explicación de por qué delay toma el valor anterior en ese caso.
¡Gracias!
Respuesta #1
Puedes usar un operador mergeMap
myObs$.pipe(
mergeMap(payload => {
return of(payload)
.pipe(delay(payload.delay))
})
);
