Я чувствую, что здесь что-то очень простое.Я пытаюсь создать простую повторную попытку для выборки, но выполняется только код в retryWhen
.Я использую React, поэтому у меня нет удобства this.http.get
.Возможно, это проблема с from(/*promise*/)
?Я пытался основать логику повтора на этой записи .
Это то, что я ожидал увидеть:
Getting data from fetch...
In the retryWhen
In the interval
/* repeat the previous 3 lines 3x times including the Fetch */
Giving up
Вместо этого я получаю:
Getting data from fetch...
In the retryWhen
In the interval...
In the interval...
In the interval...
In the interval...
Giving up
Таким образом, он просто повторяет код, который он повторяет при интервале, но не повторяет исходный вызов fetchData.Вероятно, я упускаю что-то фундаментальное из моих знаний RXJS.
Вот тестовый код:
const fetchData = new Promise((res, rej) => {
console.log("Getting data from fetch...");
rej(); // just fail immediately to test the retry
});
const source = from(fetchData)
.pipe(
retryWhen(_ => {
console.log("In the retryWhen");
return interval(1000).pipe(
tap(_ => console.log("In the interval...")),
flatMap(count => count == 3 ? throwError("Giving up") : of(count))
)
}));
source.subscribe(
result => console.log(result),
err => console.log(err)
);