【问题标题】:Observable 'save' should return EMPTY or a dummy valueObservable 'save' 应该返回 EMPTY 或一个虚拟值
【发布时间】:2018-10-09 19:17:57
【问题描述】:

我在我的应用程序中看到一个常见模式,其中函数返回不需要提供 next() 值(即 save())但可能是 Observable 链的一部分的 Observable。

在这个工作示例(下面的链接)中,我有一个演示 BookServicesave()getBooks()。代码示例保存 2 本书,从服务和控制台获取书籍。通过单个可观察链记录书籍。

我已经尝试了这两个选项:

选项 1:

  • save(title: string): Observable<never> 返回EMPTY。这意味着永远不会调用订阅者的next()。为了让可观察链继续使用单个值,我在调用save() 之后pipe(defaultIfEmpty(true))

  • 专业版:功能有效,只需调用 complete()save() 不需要返回没有意义的值。

  • Con:调用 defaultIfEmpty(true) 链接 observable 看起来并不直观。

选项 2:

  • save(title: string): Observable<boolean> 返回值 of(true)。函数有效,next()complete() 都将被调用一次。

  • 专业人士:无需 defaultIfEmpty(true) 链接 observable。

  • Con:总是调用next()。这算不算骗局?

选项 3:

  • 如果有更好的方法,请告诉我。

code example 提供选项 1 和选项 2(已注释)。

问题:save() 这样的函数应该返回什么?是否有关于此类场景的可观察设计的书面文档/文章?

感谢您对此的看法。

【问题讨论】:

  • 这只是您的特定用例,因此可能不会有任何官方指南。

标签: typescript rxjs


【解决方案1】:

我的理解是这取决于您的用例。使用 Observables 允许您为 .Save() 函数实现取消行为。它是否返回一个值或只是完成取决于您。根据您的使用情况(您是否总是将defaultIfEmpty 传递给它?)您可以选择纯版本(没有价值,只是完成)或让它默认为一个值以方便您自己使用。

重要的是您记录.Save() 函数的使用者对您的可观察对象的预期行为。它真的会只发出一个true 值并完成吗?或者从不发出值?

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多