服务端5月30日 21:21
RxJS 在 Angular 项目中通常怎么用?在 Angular 里,RxJS 主要用来处理会随时间变化的数据:HTTP 请求、路由参数、响应式表单、组件事件和应用状态。HttpClient 返回 Observable,路由的 paramMap、表单的 valueChanges 也是 Observable,所以 Angular 项目不是额外引入 RxJS,而是日常开发天然会碰到它。
## 追问
### HTTP 为什么返回 Observable 而不是 Promise?
Observable 可以取消、组合,也能和表单、路由这些流保持同一套写法。单次 HTTP 看起来和 Promise 差不多,但需要重试、超时、取消旧请求时更顺手。
### AsyncPipe 解决了什么问题?
它自动订阅 Observable,并在组件销毁时退订,减少内存泄漏。复杂副作用仍应放在组件或服务中组织。
### 表单搜索一般怎么写?
监听 valueChanges,先过滤空值,再防抖、去重,最后用 switchMap 请求接口。关键是旧请求要能被取消。
### BehaviorSubject 适合做全局状态吗?
小型状态可以,比如当前用户、筛选条件、侧边栏开关。状态变多或需要调试时,NgRx、Signal Store 更稳。
## 写段代码
```ts
results$ = this.form.controls.keyword.valueChanges.pipe(
filter(v => !!v && v.length >= 2), debounceTime(300), distinctUntilChanged(),
switchMap(q => this.api.search(q))
);
```