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

142
Vistas
¿Cómo puedo volver a intentarlo con un retraso en RxJs sin usar el obsoleto retryWhen?

Quiero volver a intentar una cadena observable con un retraso (por ejemplo, 2 segundos).

Hay algunas preguntas similares respondidas con retryWhen . Pero retryWhen parece obsoleto y no quiero usarlo.

  • El retraso y el reintento son aplicables solo si el primer intento falla
  • Si todos los reintentos fallaron, quiero responder con los datos predeterminados.

El siguiente código funciona, sin agregar el retraso, pero ¿cómo puedo agregar un retraso en esta cadena?

 of('trigger') .pipe( switchMap(() => fetchData()), retry(5), catchError(() => of(returnThisIfRetriesAreFailed)) ) .subscribe(console.log);

Entrada de StackBlitz

Intenté agregar delay(2000) , pero parece que no funciona.

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

0

No estoy seguro de lo que quieres decir con

El retraso y el reintento son aplicables solo si el primer intento falla

No pude encontrar ninguna condición en el código fuente que limitara la opción de delay para que sea aplicable solo al primer intento fallido.

Por lo tanto, debería poder pasar como un retraso ya sea un número fijo o un Observable. Por ejemplo:

 of('trigger') .pipe( switchMap(() => fetchData()), retry({count: 5, delay: 2000}), catchError(() => of(returnThisIfRetriesAreFailed)) ) .subscribe(console.log);

Si quería decir que solo desea retrasar el primer reintento, entonces podría intentar algo como esto:

 of('trigger') .pipe( switchMap(() => fetchData()), retry({count: 5, delay: (_, retryCount) => retryCount === 1 ? timer(2000) : of({})}), catchError(() => of(returnThisIfRetriesAreFailed)) ) .subscribe(console.log);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Usar:

 of('trigger').pipe( switchMap(() => fetchData()), catchError((err, caught) => caught.pipe( repeat({ count: 1, delay: 2000 }), catchError(() => of(returnThisIfRetriesAreFailed)) )) ) .subscribe(console.log);
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