Issue
I want to retry an observable chain with a delay (say, 2 sec).
There are some similar questions answered with retryWhen. But retryWhen seem deprecated and I don't want to use it.
- The delay and retry is applicable only if the first try fails
- If all the retries failed, I want to respond with a default data.
The following code works, without adding the delay. And I don't know how to add delay into this chain.
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry(5),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
I tried adding delay(2000), but seem not working.
Solution
Not sure what you mean by
The delay and retry is applicable only if the first try fails
I couldn't find any condition in the source code that would limit the delay option to be applicable only to the first failed attempt.
So you should be able to pass as a delay either a fixed number or an Observable. For example:
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry({count: 5, delay: 2000}),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
If you meant you only want to delay on the first retry, then you could try something like this:
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry({count: 5, delay: (_, retryCount) => retryCount === 1 ? timer(2000) : of({})}),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
Answered By - ggradnig
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.