Rx JS пакетные HTTP-запросы в Angular - PullRequest
1 голос
/ 04 августа 2020

У меня есть такой массив массивов:

const mynums = [[1,2], [3,4]] // this array may contain any number of integer arrays

Используя это, я хочу сделать следующие HTTP-запросы:

http://myserver.com/resource/1 // 2 requests made simultaneously
http://myserver.com/resource/2

http://myserver.com/resource/3 // 2 requests made simultaneously but only after first 2 complete
http://myserver.com/resource/4

Я знаю, что могу использовать forkJoin вот так:

forkJoin([
  this.http.get('http://myserver.com/resource/1')
  this.http.get('http://myserver.com/resource/2')
]).subscribe(
  (responses) => {
    console.log(responses[0])
    console.log(responses[1])
  }
)

Но как мне это сделать, чтобы пакетировать HTTP-запросы для размещения массива mynums, который имеет переменную длину, и чтобы гарантировать, что первый пакет запросов завершится до того, как будет завершен второй пакет запросов. сделали? и разрешить также третью или четвертую партию или N партий?

Многие спасибо

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вы можете использовать concatMap & forkJoin , чтобы сделать другой пакетный запрос после завершения первого пакета.

from(mynums).pipe( 
     concatMap (x=> {
       return forkJoin(x.map(t=>{
         return this.http.get(`http://myserver.com/resource/${t}`)
       }))
     })
).subscribe(console.log)

DEMO с пакетными запросами

1 голос
/ 04 августа 2020

попробуйте это:

source = from([[1,2], [3,4]]);

source
.pipe(
  map(idies => idies.map(id => "https://jsonplaceholder.typicode.com/todos/" + id)),
  concatMap(urls => forkJoin(...urls.map(url => this.http.get(url))))
)
.subscribe(x => console.log(x))

весь код здесь

...