可观察的“保存”应返回EMPTY或虚拟值

时间:2018-04-29 14:54:08

标签: typescript rxjs

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

在此工作示例(下面的链接)中,我有BookServicesave()的演示getBooks()。代码示例保存2本书,从服务中获取书籍,并通过单个可观察链来登录书籍。

我尝试过这两个选项:

选项1:

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

  • Pro:功能正常,只需拨打complete()即可。 save()不需要返回没有意义的值。

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

选项2:

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

  • Pro:无需defaultIfEmpty(true)链接可观察的。

  • Con:始终调用next()。这被视为con?

选项3:

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

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

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

欣赏你对此的看法。

1 个答案:

答案 0 :(得分:1)

我的理解是它取决于你的用例。使用Observables可以实现.Save()函数的取消行为。如果它返回一个值或者只是完成取决于你。根据您的使用情况(您总是将defaultIfEmpty连接到它上吗?),您可以选择纯版本(没有值,只需完成),或者让它默认为一个值,以使自己更容易。

重要的是您记录.Save()函数的使用者对您的可观察对象所期望的行为。它确实只发出true值并完成吗?或者从不发出价值?