看,我在StackBlitz https://stackblitz.com/edit/rxjs-nndpag上创建了问题
我不知道如何正确使用retryWhen
运算符。
我希望它重新订阅我的诺言from(getPromise())
并对其进行循环,直到发出期望的值为止。我肯定需要使用retryWhen
运算符,因为我可以设置延迟逻辑。
此时,如果Promise第一次生成错误的数字,它将陷入retryWhen
运算符中(请参阅StackBlitz上的示例)。
似乎与之相关,因为我使用promise而不是可观察的输入,但是我对此怀疑。
因此,Rxjs社区,我依靠您的笔记。谢谢!
最佳答案
问题是源(承诺对象)仅创建一次,而不是每次引发错误时都创建它。所以我必须使用空源作为初始源:
const source = empty()
.pipe(
defaultIfEmpty(undefined)
)
然后我可以使用
switchMap
运算符切换到新的Promise对象:const source = empty()
.pipe(
defaultIfEmpty(undefined),
switchMap(v => getPromise())
)
因此,下一次重新订阅将获得新的承诺。
这是正确的StackBlitz https://stackblitz.com/edit/rxjs-yrxace
现在它可以按我预期的方式工作-一直持续到得到正确的数字为止。