我正在尝试将以下可观察代码从使用 Observable.create 转换为使用可管道运算符。
public getUnrecoveredGearsAfterDep(): Observable<void> {
return Observable.create((observer) => {
this.vesselDetailService.getVessel().subscribe(
(vessel: Vessel) => {
console.log(vessel.cfr);
this.getAndUpdateUnrecoveredGears(vessel.cfr).subscribe(
() => {
observer.next(null);
observer.complete();
},
(error) => {
observer.error(error);
}
);
},
(error) => {
observer.error(error);
}
);
});
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下方法,但收到转换错误 cant conversion type Observable.unknown to 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)),
map((gears: GearSet[]) => of())
);
}
Run Code Online (Sandbox Code Playgroud)
您的问题是您将输出映射到of()可观察的值。这为您的函数提供了返回类型Observable<Observable<never>>.
您的地图应该简单地返回undefined或null,您不需要of:
public altGetUnrecoveredGearsAfterDep(): Observable<void> {
return this.vesselDetailService.getVessel().pipe(
tap( (vessel: Vessel) => console.log(vessel.cfr)),
switchMap((vessel: Vessel) => this.getAndUpdateUnrecoveredGears(vessel.cfr)),
map((gears: GearSet[]) => undefined)
);
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以通过使用mapTo和删除类型注释来简化:
public altGetUnrecoveredGearsAfterDep(): Observable<void> {
return this.vesselDetailService.getVessel().pipe(
tap(vessel => console.log(vessel.cfr)),
switchMap(vessel => this.getAndUpdateUnrecoveredGears(vessel.cfr)),
mapTo(undefined)
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4810 次 |
| 最近记录: |