Actualmente estoy tratando de procesar las solicitudes HTTP Post en secuencia, además de intentar repetir cada solicitud fallida hasta que tenga éxito (eso es un requisito) y luego, y solo entonces, continuar con el procesamiento de otras solicitudes. Mi código se ve así por ahora (no funciona como debería, vuelva a intentarlo cuando no se usa correctamente, soy consciente de eso, se usa solo como una referencia de punto de partida):
... subject .pipe( concatMap(async request => await this._sendPostRequest(request)), retryWhen(errors => errors.pipe( tap(error => this._logger.error('error sending request', error)), delayWhen(() => timer(5000)) ) ) ) .subscribe(); ...¡Estás cerca!
Simplemente adjunte su reintento a la promesa en lugar de la transmisión concatenada como un todo.
subject.pipe( concatMap(request => defer(() => sendPostRequest(request)).pipe( retryWhen(error$ => error$.pipe( tap((error) => console.warn('error sending request', error)), delay(1000) )) )) ).subscribe();