Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

224
Vistas
NGRX: acción de envío en el efecto catchError con diferente carga útil

Necesito llamar a una API que pueda devolver errores, advertencias o éxito.

Si devuelve advertencias, el usuario debe poder aceptar la advertencia y debo enviar la misma carga útil + acceptWarning: verdadero.

Necesito mostrar un modal iónico y esperar la respuesta del usuario para ver si acepta o cancela la advertencia.

¿Cuál debería ser la mejor manera de lograrlo?

Ahora mismo tengo algo como esto:

 @Effect() public Assign$ = this.actions$.pipe( ofType(myActions.Assign), map(action => action.payload), exhaustMap(assignment => this.assignService.assign(assignment).pipe( switchMap(() => { this.errorService.showPositiveToast(' Assigned Successfully'); return [ new LoadAssignments(), new LoadOtherData() ]; }), catchError(error => from(this.openErrorModal(error)).pipe( switchMap(({ data = '' }) => { if (data === 'Accept') { return of(new Assign({ ...assignment, acceptWarning: true })); } return of(new AssignShipmentFailure()); }) ) ) ) ) ); async openErrorModal(response: any) { const errorModal = await this.modalCtrl.create({ component: ErrorValidationPopup, componentProps: { response: response, }, }); await errorModal.present(); return errorModal.onDidDismiss(); }

Pero no vuelve a activar la acción Asignar. Gracias por tu ayuda

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si ocurría algún error en el Observable del efecto (o en cualquier Observable ), entonces su flujo no emitía ningún valor y se erró inmediatamente. Después del error, no se completó y el Effect dejará de funcionar.

Para mantener el Effect funcionando si se produce algún error, debe swichMap en lugar de exhaustMap y manejar los errores dentro del observable interno de switchMap , por lo que el Observable principal no se verá afectado por eso.

¿Por qué usar SwitchMap?

La principal diferencia entre switchMap y otros operadores de aplanamiento es el efecto de cancelación. En cada emisión, el observable interno anterior (el resultado de la función que proporcionó) se cancela y se suscribe el nuevo observable. Puedes recordar esto por la frase cambiar a un nuevo observable

Puedes intentar algo como lo siguiente:

 @Effect() public Assign$ = this.actions$.pipe( ofType(myActions.Assign), map(action => action.payload), switchMap(assignment => this.assignService.assign(assignment).pipe( switchMap(() => { this.errorService.showPositiveToast('Assigned Successfully'); return [ new LoadAssignments(), new LoadOtherData() ]; }), catchError(error => from(this.openErrorModal(error)).pipe( map(({ data = '' }) => { if (data === 'Accept') { return new Assign({ ...assignment, acceptWarning: true }); } return new AssignShipmentFailure(); }) ) ) ) ) );
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda