我觉得我在这里错过了一些非常简单的东西。我正在尝试为 fetch 创建一个简单的重试,但只有其中的代码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
所以它只是重复他 retryWhen 间隔中的代码,而不是重复原始的 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)
);