我在我的应用程序中看到一个常见模式,其中函数返回不需要提供next()
值的Observable(即save()
),但可能是Observable链的一部分。
在此工作示例(下面的链接)中,我有BookService
和save()
的演示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()
等函数应该返回什么?是否有关于此类情景的可观察设计的书面文件/文章?
欣赏你对此的看法。
答案 0 :(得分:1)
我的理解是它取决于你的用例。使用Observables可以实现.Save()
函数的取消行为。如果它返回一个值或者只是完成取决于你。根据您的使用情况(您总是将defaultIfEmpty
连接到它上吗?),您可以选择纯版本(没有值,只需完成),或者让它默认为一个值,以使自己更容易。
重要的是您记录.Save()
函数的使用者对您的可观察对象所期望的行为。它确实只发出true
值并完成吗?或者从不发出价值?