总而言之,我已经问过来自rxjs的组合运算符...
我有一系列网站:
const sites = [
{ name:'siteOne', url: 'http://www.example.com' },
{ name:'siteTwo', url: 'http://www.google.com' },
{ name:'siteThree', url: 'http://www.google.com' }
]
所以,我不想每次都提出make请求,但我需要为每个网站提供一个请求,而不是制作新流,并结合网站,如下所示:
[ html, siteTwo, siteThree]
[ html, siteOne ]
有什么方法可以做到这一点?谢谢
答案 0 :(得分:1)
如果您只想为每个唯一网址获取一次数据,您可以执行以下操作:
Rx.Observable.from(sites)
.groupBy(s => s.url)
.flatMap(grp => grp.toArray())
.flatMap(
uniqueUrlGrouping => fetchHtml(uniqueUrlGrouping[0].url),
(uniqueUrlGrouping, html) => ({
url: uniqueUrlGrouping[0].url,
sites: uniqueUrlGrouping.map(s => s.name),
html:html
})
)
.subscribe(val => console.log(val));
请注意;要使toArray()
工作,您的输入流需要完成,否则它不知道何时可以将完成的分组发射转换为数组。
请注意,.groupBy()
会将所有唯一网址保留在内存中,直到您的输入流完成,因此如果输入流无限制,它可能会增加到大量内存使用。