MonoTypeOperatorFunction<T>: El Observable fuente modificado con la lógica de reintento.
Descripción
Retorna un Observable que refleja el Observable fuente con la excepción de un error. Si el Observable fuente lanza un error, retryWhen emitirá el Throwable que provocó el error al Observable retornado por notifier. Si ese Observable hace una llamada a complete o a error, entonces este operador llamará a complete o a error en la suscripción hija. En caso contrario, retryWhen se resuscribirá al Observable fuente.
Ejemplos
Reintentar una secuencia Observable tras esperar un tiempo determinado, sin un número limitado de intentos
import { catchError, concatMap, map, mergeMap, retryWhen,} from"rxjs/operators";import { ajax } from"rxjs/ajax";import { of, throwError, timer } from"rxjs";constpokemonId$=of(-3,5,6);constmaxTries=2;constdelayMilliseconds=3000;functiongetPokemonName(id:number) {returnajax.getJSON(`https://pokeapi.co/api/v2/pokemon/${id}`).pipe(map(({ name }) => name),retryWhen((error$) =>error$.pipe(mergeMap((error, tries) =>// Si no se han gastado todos los intentos, se volverá a reintentar. En caso contrario, se lanzará un error tries < maxTries ?timer(delayMilliseconds) :throwError(error) ) ) ),// Capturando el errorcatchError((error) =>of( `Reintentado ${maxTries} veces, con un retraso de ${delayMilliseconds}ms, pero ha ocurrido un error: ${error.message}`
) ) );}pokemonId$.pipe(concatMap((id) =>getPokemonName(id))).subscribe(console.log,console.error, () =>console.log("¡Completado!"));// Salida: 'Reintentado 2 veces, con un retraso de 3000ms, pero ha ocurrido un error: ajax error 404', 'charmeleon', 'charizard', '¡Completado!'