#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]