http-ответ слияния rxjs

#javascript #http #rxjs

#javascript #http #rxjs

Вопрос:

Несколько http-запросов выполняются одновременно, и количество одновременных запросов можно контролировать. После завершения всех запросов данные могут быть объединены (данные могут быть упорядоченными или неупорядоченными)

 from([link, link, link]).pipe(
   merge(l => request.get(l)),
   // something...
)

return [linkdata, linkdata, linkdata]
  

Ответ №1:

Рассмотрите возможность его реализации, как показано ниже:

 from([link1, link2, link3]).pipe(
  mergeMap(request.get, CONCURRENT_NUMBER), // <= limit the number of active inner subscriptions at a time
  toArray() // <= transform stream into array prior to completion 
)
.subscribe(([result1, result2, result3]) => { })
  

Ответ №2:

Я думаю, что вы ищете mergeAll

 from([link1, link2, link3].map(link => request.get(link))).pipe(
  mergeAll(CONCURRENT_NUMBER),
  // something like reduce, toArray... to combine the results
).subscribe(console.log);
  

Ответ №3:

Похоже, вам нужно использовать forkJoin

 const links = [link1, link2, link3]; // assump `links` is an array of string

forkJoin(
  from(links).pipe(
    mergeMap((link: string) => {
      return http.get(link); // returns an observable
    }),
    toArray()
  )
).pipe(
   map(array => array[0]) // data stream is in [[data]] format, you only need head
); // [link1data, link2data, link3data]