rxjs - 当observable开始执行时执行某些操作

时间:2018-04-11 19:22:30

标签: angular rxjs

有一种方法可以在observable开始执行时附加一个处理程序(有人在其上调用subscribe)吗?

喜欢角度:

    this.http.post('someUrl', resource).pipe(
       catchError(),
       finalize((() => this.hideLoader()),
       **executing(() => this.showLoader()) <------**
    )

3 个答案:

答案 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())
);