Angular 2/RXJS-需要一些批处理请求的帮助吗

Angular 2/RXJS-需要一些批处理请求的帮助吗,angular,rxjs,observable,rxjs5,Angular,Rxjs,Observable,Rxjs5,我一直在阅读rxjs文档,但在所有的操作符中迷失了方向 这就是我目前得到的 let obs = Observable.from([1, 3, 5]) 所以我需要做的是从数组中获取一些设置的数量。在post请求中使用结果,当结果成功时,我需要重新启动流程。我想收集所有结果,并在过程进行时保持进度(对于进度条) 我不需要所有这些的代码。我真正需要知道的是如何使用rxjs来分割这个阵列。。发送其中的一部分,然后重新启动进程,直到没有任何东西可以发送为止 最终解决方案 var _this

我一直在阅读rxjs文档,但在所有的操作符中迷失了方向

这就是我目前得到的

  let obs = Observable.from([1, 3, 5])   
所以我需要做的是从数组中获取一些设置的数量。在post请求中使用结果,当结果成功时,我需要重新启动流程。我想收集所有结果,并在过程进行时保持进度(对于进度条)

我不需要所有这些的代码。我真正需要知道的是如何使用rxjs来分割这个阵列。。发送其中的一部分,然后重新启动进程,直到没有任何东西可以发送为止

最终解决方案

  var _this = this

  function productsRequest(arr) {
    return _this.chainableRequest('post', `reports/${clientId}/${retailerId}/`, loadedProductsReport, {
        'identifiers': arr,
        'realTime': true
      })    
  }

  let arrayCount = Math.ceil(identifiers.length/10)
  let obs = Observable.from(identifiers)            
    .bufferCount(10)
    .concatMap(arr => {
      arrayCount--
      return arrayCount > 0 ? productsRequest(arr) : Observable.empty()
    })


  let subscriber = obs.subscribe(
    value => console.log(value)
  )
父级中的可链接请求方法

  chainableRequest(method: string, endpoint: string, action: Function, data = {}, callback?: Function){
let body = (<any>Object).assign({}, {
  headers: this.headers
}, data)


return this._http[method.toLowerCase()](`${this.baseUri}/${endpoint}`, body, body)
          .map((res: Response) => res.json())
  }
chainableRequest(方法:字符串,端点:字符串,操作:函数,数据={},回调?:函数){
让body=(Object).assign({}{
headers:this.headers
},数据)
返回此值。http[method.toLowerCase()](`${this.baseUri}/${endpoint}`,body,body)
.map((res:Response)=>res.json())
}

这在很大程度上取决于您试图实现的目标

如果您想基于以前的某个可观察对象递归调用一个可观察对象,并且您不知道要调用它多少次,那么请使用运算符

例如,此演示基于上一次调用的响应递归创建5个请求(
count
property):

见现场演示:

或者,如果您只想依次调用一组HTTP请求(操作员),或者一次调用所有HTTP请求并在它们到达时使用它们(操作员):

打印到控制台:

Response: 0
Response: 1
Response: 2
Response: 3
Response: 4
Response: 5
Completed
https://httpbin.org/get?1
https://httpbin.org/get?2
https://httpbin.org/get?3

请参阅实时演示:

我试图完成的是从阵列中获取x个项目->将其传递到http请求中。等待http请求完成,然后从一开始就再次传递项目。我已经试过了你所有的例子,但没有看到如何让我尝试做的工作。@hamobi运行Observables一次一个可以用
concatMap()
完成。那么您想从同一阵列重新启动进程还是什么?是的,我想从同一阵列重新启动进程。我想从数组中发送十个项目,然后发送下十个项目,依此类推。。直到我到达数组的末尾。谢谢:)@hamobi然后使用
expand()
而不是
concatMap()
我已经更新了我的工作。。使用“立即展开”。我的请求仍在一下子被驳回。。你能看出我做错了什么吗?
Observable.from([
    'https://httpbin.org/get?1',
    'https://httpbin.org/get?2',
    'https://httpbin.org/get?3',
  ])
  .concatMap(url => Observable.of(url))
  .subscribe(response => console.log(response));
https://httpbin.org/get?1
https://httpbin.org/get?2
https://httpbin.org/get?3