Вы ищете задержку только после обнаружения ошибки? В предоставленном вами коде может быть непреднамеренная ошибка, поскольку технически поток заканчивается после возникновения ошибки. Вы можете понять, что я имею в виду, изменив возвращаемое значение на правильную ошибку, например:
const x = timer(0, 1000).pipe(
mergeMap(() => fetch()),
catchError((err) => { // "caught" is not needed, it isn't really anything.
console.log("Error: ", err);
return of(err); // If you return the error properly, the stream will end on error as expected behavior.
}),
);
Я подозреваю, что вы действительно хотите сделать это повторить попытку с таймером задержки, и вы можете сделать это, выполнивthis:
const x = timer(0, 1000).pipe(
mergeMap(() => fetch()),
retryWhen(errors =>
errors.pipe(
tap(errors => console.log('Error: ', errors)),
delayWhen(() => timer(3000))
)
)
);
Это будет повторяться при возникновении ошибки через x секунд.