Я хотел бы вернуть ошибку после завершения retryWhen
. Вот пример кода:
const httpGet = (d, res) => {
return rxjs.of(res).pipe(rxjs.operators.delay(d));
};
const repeat = () => {
return httpGet(1000, false).pipe(
rxjs.operators.tap(() => console.log("Response from repeat")),
rxjs.operators.flatMap(res => {
if (res === false) {
// Throw error due to invalid response
return rxjs.throwError("Invalid response inside repeat");
}
return rxjs.of(res);
}),
rxjs.operators.retryWhen(err => {
// Retry same httpGet call due to invalid response
return err.pipe(
rxjs.operators.flatMap(e => {
// Delay execution of next httpGet call
return rxjs.timer(1000);
}),
// Retry httpGet call only 3 times
rxjs.operators.take(3)
);
})
);
};
const execute = () => {
return httpGet(1000, false).pipe(
rxjs.operators.tap(() => console.log("Response from execute")),
rxjs.operators.switchMap(res => {
// If res is false wait 1sec and execute repeat()
if (res === false) {
return rxjs.timer(1000).pipe(rxjs.operators.concatMapTo(repeat()));
}
return rxjs.of(res);
})
);
};
// Start executing
execute().subscribe(
r => console.log("Response:", r),
err => console.error("Error:", err),
() => console.log("Completed")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.js"></script>
Это текущий вывод:
Response from execute
Response from repeat
Response from repeat
Response from repeat
Completed
И я хотел бы получить следующий вывод:
Response from execute
Response from repeat
Response from repeat
Response from repeat
Error: Some message
Поэтому мне нужно выдать ошибку в каком-то месте после завершения повторных вызовов без действительного ответа.