我正在使用角度服务来包装一些http调用,以管理应用程序的加载状态。
此服务存储呼叫状态以进行进一步处理。不幸的是,从未调用finalize函数。
这是包装纸:
searchWithLoader(obs: Observable<any>) {
this.show();
obs.pipe(finalize(() => {
console.log("FINALIZE NOT CALLED");
this.hide();
}));
return obs;
}
以及我通常所说的方式:
let performanceLoader = this.loaderService.searchWithLoader(
this.performanceDataService.getSomething({
x: x,
y: y,
}));
performanceLoader.subscribe(() => {});
是否有解决方法,以便在服务而不是组件中调用finalize?
答案 0 :(得分:4)
当您调用可观察对象的管道函数时,它不会使可观察对象发生变化。而是返回一个新的可观察值。因此,您应该将obs设置为obs.pipe(),如下所示:
searchWithLoader(obs: Observable<any>) {
this.show();
return obs.pipe(finalize(() => {
console.log("FINALIZE NOT CALLED");
this.hide();
}));
}
答案 1 :(得分:1)
您的代码
this.performanceDataService.getSomething({
x: x,
y: y,
}))
这不是可观察的,将其传递给searchWithLoader
函数时必须是可观察的。除非您可以显示getSomething
的代码,否则我们可以为您提供更多帮助