我正在提供一种具有多种方法来触发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);
答案 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