在 angular 中,应避免嵌套订阅(nested subscriptions),推荐使用 rxjs 的 `switchmap`、`mergemap` 或 `concatmap` 等操作符链式调用 api,并根据前序响应结果条件性触发后续逻辑。
在 Angular 应用中,当需要「仅在第一个 API 成功返回特定状态(如 status === 1)后才调用第二个 API」时,直接在 subscribe 回调中调用另一函数(即嵌套订阅)虽能工作,但存在明显缺陷:难以统一错误处理、无法取消冗余请求、不利于测试,且易引发内存泄漏。
✅ 推荐方案:使用 switchMap 实现条件化可取消的链式调用
switchMap 会将前一个 Observable 的输出映射为新的 Observable,并自动取消前一个未完成的内部订阅——这对用户快速连续触发场景(如搜索框防抖后请求)尤为关键。
以下是优化后的代码示例: