我在使用RxJS和处理请求数组的正确方法时遇到了麻烦。 假设我有大约50个请求的数组,如下所示:
let requestCounter = 0;
function makeRequest(timeToDelay) {
return of('Request Complete!').pipe(delay(timeToDelay));
}
const requestArray = []
for(let i=0;i<25;i++){
requestArray.push(makeRequest(3000)); //3 seconds request
requestArray.push(makeRequest(1000)); //1 second request
}
我的目标是:
到目前为止,我最近去做的是遵循这篇文章中的回复:
RxJS parallel queue with concurrent workers?
问题是我发现RxJS,并且示例对我来说太复杂了,我找不到如何处理每个请求的计数器。
希望您能帮助我。 (对不起,英语不好,这不是我的母语)
编辑: 最终解决方案如下:
forkJoinConcurrent<T>(
observables: Observable<T>[],
concurrent: number
): Observable<T[]> {
return from(observables).pipe(
mergeMap((outerValue, outerIndex) => outerValue.pipe(
tap(// my code ),
last(),
catchError(error => of(error)),
map((innerValue, innerIndex) => ({index: outerIndex, value: innerValue})),
), concurrent),
toArray(),
map(a => (a.sort((l, r) => l.index - r.index).map(e => e.value))),
);
}
答案 0 :(得分:0)
首先,您应该使用subject存储请求队列,并查看mergeMap
运算符,您可以为最大并发性设置一个concurrency
参数,以及一个{{1 }}变量以跟踪通话次数
https://www.learnrxjs.io/operators/transformation/mergemap.html
index