我想延遲重試一個可觀察的鏈(比如 2 秒)。
有一些類似的問題回答了retryWhen。但retryWhen似乎已棄用,我不想使用它。
- 延遲和重試僅在第一次嘗試失敗時適用
- 如果所有重試都失敗,我想用默認資料進行回應。
以下代碼有效,不增加延遲。而且我不知道如何在這個鏈中添加延遲。
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry(5),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
堆疊閃電戰
我嘗試添加delay(2000),但似乎不起作用。
uj5u.com熱心網友回復:
不知道你的意思
延遲和重試僅在第一次嘗試失敗時適用
我在源代碼中找不到任何將delay選項限制為僅適用于第一次失敗嘗試的條件。
因此,您應該能夠將固定數字或 Observable 作為延遲傳遞。例如:
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry({count: 5, delay: 2000}),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
如果你的意思是你只想延遲第一次重試,那么你可以嘗試這樣的事情:
of('trigger')
.pipe(
switchMap(() => fetchData()),
retry({count: 5, delay: (_, retryCount) => retryCount === 1 ? timer(2000) : of({})}),
catchError(() => of(returnThisIfRetriesAreFailed))
)
.subscribe(console.log);
uj5u.com熱心網友回復:
在 Tobias 發表評論后修復:
of('trigger').pipe(
switchMap(() => fetchData()),
catchError((err, caught) => caught.pipe(
repeat({ count: 1, delay: 2000 }),
catchError(() => of(returnThisIfRetriesAreFailed))
))
)
.subscribe(console.log);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488779.html
標籤:javascript 有角度的 打字稿 rxjs
