将RxJs Observable的Observable转换为未处理的Observable的数量?

时间:2018-07-21 18:50:41

标签: rxjs rxjs6

我正在提供一种具有多种方法来触发HTTP调用的服务。我想向客户透露一个Observable,告诉他们是否有任何待处理的呼叫。

我认为这种方法通常会奏效,但是感觉很笨拙,而且不太像RxJs。我已经遍历StackOverflow并通过RxJs文档进行了搜索,但是找不到更好的方法。有什么建议吗?谢谢!

If .Cells(i, 19).Value = "Yes" Then
    Me.OptionButton1 = True
ElseIf .Cells(i, 19).Value = "No" Then
    Me.OptionButton2 = True
Else
    Me.OptionButton1 = False
    Me.OptionButton2 = False
End If

在模板中:

let pendingCountSubject = new BehaviorSubject<number>(0);
let pendingCount$ = pendingCountSubject.asObservable();

let pendingSubject = new Subject<Observable<any>>();
pendingSubject.pipe(
  finalize(() => {
    pendingCountSubject.next(pendingCountSubject.value - 1);
  }))
  .subscribe();

function trackPendingObservable(obs) {
  pendingCountSubject.next(pendingCountSubject.value + 1);
  pendingSubject.next(obs);
}

trackPendingObservable(httpCall1);
trackPendingObservable(httpCall2);
trackPendingObservable(httpCall3);

1 个答案:

答案 0 :(得分:0)

如果我做对了,您的服务有几种执行http调用的方法,例如

httpCall1(): Observable<any> { // do stuff}
httpCall2(): Observable<any> { // do stuff}

httpCallN(): Observable<any> { // do stuff}

这些方法以某种方式并行运行,可能是因为它们以快速同步的顺序被调用。

您想要显示的是在某个时刻有多少人处于“飞行中”状态。

类似的事情可能会起作用。

该服务公开了http调用方法以及当前“运行中”的呼叫计数器。

export class MyHttpService {

  constructor(private http: HttpClient)

  public callsOnFly = 0;

  httpGenericCall(httpCall: Observable<any>) {
     this.callsOnFly++;
     return httpCall
         .pipe(
            finalize(() => this.callsOnFly--)
         )
  }

  httpCall1() {
     return this.httpGenericCall(this.http.get('http://my-server1'));
  }

  httpCall12() {
     return this.httpGenericCall(this.http.get('http://my-server2'));
  }

  httpCallN() {
     return this.httpGenericCall(this.http.get('http://my-serverN'));
  }

}

该组件仅可以通过插值显示计数器的值

Pending calls: {{ httpService.callsOnFly }}

我假设组件中MyHttpService的名称为httpService