如何将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
相关产品推荐
相关产品推荐

