You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将RxJS中返回Observable<void>的Observable.create改写为管道操作符实现

问题解决

错误原因

  • 你在map操作符中返回了of()(这是一个Observable对象),map只会对值做转换,不会自动展开内部Observable,导致最终返回类型变成Observable<Observable<void>>,和你声明的Observable<void>不匹配,触发类型错误。
  • 不需要额外通过of()创建新的Observable,直接转换上游值为void类型即可。

修正后的代码

public altGetUnrecoveredGearsAfterDep(): Observable<void> {
  return this.vesselDetailService.getVessel().pipe(
    tap((vessel: Vessel) => console.log(vessel.cfr)),
    switchMap((vessel: Vessel) => this.getAndUpdateUnrecoveredGears(vessel.cfr)),
    // 直接将上游值映射为void类型即可,不需要嵌套of()
    map(() => void 0)
    // 也可以用更简洁的mapTo写法替代上面的map:mapTo(void 0),效果完全一致
  );
}

可选优化方案

如果你完全不需要关心getAndUpdateUnrecoveredGears的返回值,也可以用ignoreElements+endWith的组合完全对齐原代码的逻辑(仅在请求完成后发射空值、忽略中间返回值):

public altGetUnrecoveredGearsAfterDep(): Observable<void> {
  return this.vesselDetailService.getVessel().pipe(
    tap((vessel: Vessel) => console.log(vessel.cfr)),
    switchMap((vessel: Vessel) => this.getAndUpdateUnrecoveredGears(vessel.cfr)),
    ignoreElements(),
    endWith(void 0)
  );
}

内容的提问来源于stack exchange,提问作者declan roche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:15:03