【问题标题】:Why retryWhen operator does not resubscribe to the flow again?为什么 retryWhen 运算符不再重新订阅流?
【发布时间】:2023-03-29 09:10:01
【问题描述】:

看,我在 StackBlitz https://stackblitz.com/edit/rxjs-nndpag 上创建了这个问题

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

此时,如果 promise 第一次生成错误的数字,它就会卡在 retryWhen 运算符中(参见 StackBlitz 上的示例)。

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

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    问题是源(promise 对象)被创建一次,而不是每次抛出错误时都创建它。所以我必须使用空源作为初始源:

    const source = empty()
      .pipe(
        defaultIfEmpty(undefined)
      )
    

    然后我可以使用 switchMap 运算符切换到 new promise 对象:

    const source = empty()
      .pipe(
        defaultIfEmpty(undefined),
        switchMap(v => getPromise())
      )
    

    因此,下一次重新订阅将获得新的承诺。 这是正确的 StackBlitz https://stackblitz.com/edit/rxjs-yrxace 现在它可以按我的预期工作 - 它会一直持续到获得正确的数字为止。

    【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多