使用 typescript、Angular 6+ 和 rxjs,如何最好地向调用者表示 HTTP 响应内容为空 (Content-Length=0)?
如果不在方法调用中指定类型(get
、post
等),一个Observable<Object>
返回,这对响应内容具有误导性,因为人们可能会想使用给定的对象:
let response: Observable<Object> = httpClient.post('...');
response.subscribe(o => ...);
在这种情况下,o
始终为 null,但这不是显式的,也未被编译器检查。
更好的解决方案是返回 Observable<null>
但我发现语义不明确,因为 null 也可以指空数据(例如,没有电话号码的客户会将 phoneNumber 属性设置为 null)。
最佳答案
你要找的东西确实存在,它的正确类型是Observable<void>
.就像你说的null
是一个可以由任何 Observable 产生的常规值。在 RxJS 6 中,它由 empty()
表示这与任何其他 Observable 一样,但它不会发出任何 next
值并发送 complete
信号。
import { empty, EMPTY } from 'rxjs';
empty().subscribe(...) // will receive just the `complete` notification
// or you can use EMPTY
EMPTY.subscribe(...)
顺便说一下,您还可以将任何 Observable 转换为 Observable<void>
使用 ignoreElements()
运营商。
还有 never()
和 NEVER
Observables 但不要将它们误认为是 empty()
因为它们不会发出任何东西(甚至不会发出 complete
通知)。
关于angular - 使用 typescript ,什么是最好的 Observable 类型来最好地表示没有内容的 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853098/