我正在尝试将以下可观察代码从使用 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) 我有以下方法,我想将其更新为更具反应性的风格。它包含 if/else 逻辑。我读过您应该能够分解为流,对每个流应用过滤器并将流合并回,但我不确定如何将其应用于下面的示例。
下面的示例方法传递排除标志。该方法首先调用 http 服务来获取数组。如果排除标志为 true,则我们需要调用另一个 http 服务来获取过滤数组所需的一些配置数据。
感谢您的帮助。
method A(boolean excludeSomeCatagory ) : Observable<Species[]> {
return Observable.create((observer) => {
getSomeHttpData().subscribe((species: Species[]) => {
if(!excludeSomeCatagory){
observer.next(species);
observer.complete();
}
else {
getSomeConfigDataFromHttp().subscribe(
(data) => {
filteredArray: Species[] = applyFilter(data, species);
observer.next(filteredArray);
observer.complete();
});
}
});
}
}
Run Code Online (Sandbox Code Playgroud)