有一种方法可以在observable开始执行时附加一个处理程序(有人在其上调用subscribe)吗?
喜欢角度:
this.http.post('someUrl', resource).pipe(
catchError(),
finalize((() => this.hideLoader()),
**executing(() => this.showLoader()) <------**
)
答案 0 :(得分:8)
defer
可观察的工厂功能很可能是您正在寻找的:
import { defer } from 'rxjs';
const post = defer(() => {
this.showLoader();
return this.http.post('someUrl', resource).pipe(
catchError(),
finalize(() => this.hideLoader())
);
});
post.subscribe();
答案 1 :(得分:2)
你可以将http.post observable包装在Observable.create中,然后执行你想要的逻辑:
const wrapped$: Observable<any> = Observable.create((observer:
Observer<any>) => {
showLoader();
http.post('...').subscribe(
value => observer.next(value),
error => observer.error(error),
() => observer.complete()
)
});
wrapped$.subscribe() // and subscribe to this source instead
答案 2 :(得分:1)
与以前的建议相同的更漂亮的方法:
@Scheduled(fixedDelay = 6000)
public void myScheduledMethod(){
//Do Stuff
}
下面的高级示例
:const withLoader$ = of(null).pipe(
tap(() => showLoader()),
flatMap(() => this.http.post('someUrl', resource)),
finalize(() => this.hideLoader())
);