- чтобы основной поток не падал при повторе:
this.saveFeature$
.pipe(
switchMap((feature) => {
const projection = feature.get('panoramaCard')
? {
dataProjection: this.configService.config.outerProjection,
featureProjection: this.configService.config.innerProjection,
}
: null;
let geojson = new GeoJSON().writeFeatureObject(feature, projection);
if (extendedData?.image) {
const cached =
this.inventoryObjectService.objectsService.cachedImages.get(
extendedData.image
);
const image = cached
? of(cached)
: this.getImage(extendedData.image);
return from(image).pipe(
concatMap((blob: Blob) =>
this.saveImage(blob).pipe(
catchError((error) => {
return throwError(() => error);
})
)
),
map((filename: string) => {
return geojson;
}),
catchError((error) => {
return throwError(() => error);
})
);
}
return of(geojson);
}),
switchMap((geojson) => {
return
);
}),
catchError((error) => {
return throwError(() => error);
})
)
.subscribe({});
Падает тут:
return from(image).pipe(
concatMap((blob: Blob) =>
this.saveImage(blob).pipe(
catchError((error) => {
return throwError(() => error);
})
)
),
чтобы при ошибке не упало, нужно в catchError вернуть observable
так и сделал . падает тут и потом попадает в ветку error: return from(image).pipe( concatMap((blob: Blob) => this.saveImage(blob).pipe( catchError((error) => { return throwError(() => error); }) ) ),
вам надо кэтч поставить после saveImage, а не в общем потоке. ну и возврат ошибки генерирует ошибку снова же, получается вы поставили бессмысленный кэтч а вернуть можно NEVER, подписка на него не сработает
после save соля - он как раз такие не работал - пропускал дальше и ломал поток
еще разок продебажу
Обсуждают сегодня