Jugar usando ngrx con el módulo de efectos. Estoy enviando una acción, haciendo algunas cosas asíncronas a través de un efecto, luego estoy enviando una nueva acción para actualizar el estado y luego redirigir. Aquí hay una versión reducida de lo que estoy haciendo:
@Injectable() export class Effects { @Effect() start$: Observable<Action> = this.actions$ .ofType('start') // omitted for brevity .concatMap(action => [ new finishAction(action.payload), go(['/']) ]) .catch((err) => { console.log('err', err); return Observable.empty(); }) constructor(private actions$: Actions) { } } Todo esto funciona bien: cuando envío una acción de start , este efecto se activa, envía una acción de finish y luego se redirige a la raíz (a través de la acción go que se importa desde @ngrx/router-store .
¿Cómo manejo algo que falla en finishAction ? En este momento, aparece un error en la consola y luego go ejecuta independientemente.
Idealmente, me gustaría interceptar esta falla y enviar otra acción (para poder mostrar un modal o algo así, pero no hacer la redirección)
Si el reductor de finishAction falla el proceso, el estado de la acción debe cambiarse al de error.
Puede suscribirse a Effects.start$ en su componente y seleccionar el estado de error. Si la suscripción recibe el error, puede reaccionar moviéndose a una nueva ruta.