Rxjs递归调用-并发
下面的示例代码递归地从某个REST资源提取数据。 每个端点都提供以下JSON内容Rxjs递归调用-并发,rxjs,Rxjs,下面的示例代码递归地从某个REST资源提取数据。 每个端点都提供以下JSON内容 { data: '123', urls: ['https//example/bar', 'https//example/bim'] } 我可以构建一个Rx流,以递归方式提取内容,如下所示: function getData(url) { return fromFetch(url).pipe( mergeMap(resp => resp.json()), mergeMap(con
{ data: '123', urls: ['https//example/bar', 'https//example/bim'] }
我可以构建一个Rx流,以递归方式提取内容,如下所示:
function getData(url) {
return fromFetch(url).pipe(
mergeMap(resp => resp.json()),
mergeMap(content => merge(of(content.data), ...content.urls.map(getData)))
)
}
我的问题是,在这里控制HTTP调用并发性的最佳方法是什么
- 这可以通过自定义调度程序实现吗
- 或者我应该简单地将fromFetch包装到一个类中,该类控制在任何时间点可以进行多少HTTP调用的并发性
扩展
您可能只获得最大1个并发,使用subject+mergeMap更容易控制并发,因此您只有一个通道可以使用
const fetchSubject=new Subject();
fetchSubject.pipe(
mergeMap(url=>fromFetch(url),null,CONCURRENCY)
mergeMap(resp => resp.json()),
tap(url=>content.urls.map(url=>fetchSubject.next(url))
scan((acc,curr) =>{
return [curr.data,...acc]
})
)
不知道它是否有帮助,但可以有一个表示最大并发调用的参数。这听起来像是糟糕的api设计,为什么所有依赖调用都不会发生在服务器端?你可以使用rxjs
expand
操作符[.看,一个类似的问题很好-啊,很好,我不知道项目操作符,我会研究它的。谢谢,这也很有效,expand也有一个并发参数。看