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