Javascript 当操作员不再重新订阅流时,为什么要重新订阅?

Javascript 当操作员不再重新订阅流时,为什么要重新订阅?,javascript,rxjs,Javascript,Rxjs,听着,我在StackBlitz上创造了这个问题 我不知道如何正确使用retryWhen操作符。 我希望它从(getPromise())重新订阅我的承诺,并循环它,直到它发出所需的值。我肯定需要使用retryWhen操作符,因为我可以设置延迟逻辑 此时,如果promise第一次生成错误的号码,它就会卡在retryWhen操作符中(参见StackBlitz上的示例) 这似乎是相关的,因为我使用承诺而不是可观察的输入,但我怀疑这是真的。 所以,Rxjs社区,我指望你的笔记。谢谢大家! 问题在于源(承诺

听着,我在StackBlitz上创造了这个问题

我不知道如何正确使用
retryWhen
操作符。 我希望它从(getPromise())重新订阅我的承诺
,并循环它,直到它发出所需的值。我肯定需要使用
retryWhen
操作符,因为我可以设置延迟逻辑

此时,如果promise第一次生成错误的号码,它就会卡在
retryWhen
操作符中(参见StackBlitz上的示例)

这似乎是相关的,因为我使用承诺而不是可观察的输入,但我怀疑这是真的。
所以,Rxjs社区,我指望你的笔记。谢谢大家!

问题在于源(承诺对象)只创建了一次,而不是每次抛出错误时都创建它。所以我使用空源作为初始源:

const source = empty()
  .pipe(
    defaultIfEmpty(undefined)
  )
然后我可以使用
switchMap
操作符切换到newpromise对象:

const source = empty()
  .pipe(
    defaultIfEmpty(undefined),
    switchMap(v => getPromise())
  )
因此,下一次再订购将获得新的承诺。 这是正确的闪电战 现在它就像我期望的那样工作-它一直持续到得到正确的数字。

延迟(()=>getPromise())
是一条路,我想: