Rxjs递归调用-并发

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

下面的示例代码递归地从某个REST资源提取数据。 每个端点都提供以下JSON内容

{ 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也有一个并发参数。看