Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

211
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!