angular - 使用 typescript ,什么是最好的 Observable 类型来最好地表示没有内容的 HTTP 响应?

标签 angular typescript http rxjs

使用 typescript、Angular 6+ 和 rxjs,如何最好地向调用者表示 HTTP 响应内容为空 (Content-Length=0)?

如果不在方法调用中指定类型(getpost 等),一个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/

相关文章:

angular - Observable:如果在 map() 之前,为什么不导致 subscribe() 成功函数?

reactjs - 是否可以从 Typescript 中的文字联合中删除更广泛的类型?

mysql - 带有 Sequelize 和 Typescript 的 NodeJS

python http 客户端卡在 100 继续

http - 如何强制 HTTP 客户端使用条件请求进行更新?

javascript - 将元素引用传递给指令

Angular 清理构建文件?

angular - 无法读取 ngAfterViewInit 中未定义的属性 'createComponent'

javascript - Jest - 在一个测试套件中多次测试模块

python - 使用webclient.Agent时connectionLost可能出现哪些异常?