【问题标题】:How to use rxjs defaultIfEmpty on ReplaySubject如何在 ReplaySubject 上使用 rxjs defaultIfEmpty
【发布时间】:2021-12-06 19:42:19
【问题描述】:

考虑这段代码:

const subject = new ReplaySubject<string>();
const observable$ = subject.asObservable();
const result = observable$.pipe(
  map(value => value + 'not empty'),
  defaultIfEmpty('empty')
);
result.subscribe(value => console.log(value));

当我运行它时,我希望在我的浏览器控制台日志中有 'empty',但什么也没有。

有什么想法吗?

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    RxJS 文档讲述了defaultIfEmptyEmit given value if nothing is emitted before completion.

    看来您需要完成您的Subject,然后,如果没有发出值,您将获得您的defaultIfEmpty 值。

    【讨论】:

    • 感谢您的回答。实际上,我试图简化我在问题中给出的代码。在我正在进行的项目中,主题是私有的,我只能访问 observable。
    • @Mchaker 在什么情况下你认为 observable 是空的?您可能可以对其进行编码。就像您正在访问服务器 api 并且 10 秒没有响应,它可能已经超时。您可以使用 RxJS 的 timeouttimeoutWith 作为该示例。
    • @MChaker 我可以推荐使用例如startWith 运算符,在这种情况下它将在开始时设置默认值。
    • @TonyMarko +1 为这个替代方案。
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多