javascript中的rxjs5组合示例

Example of rxjs5 Combination in javascript

大家好,我问过 rxjs 的组合运算符...

我有一系列网站:

const sites = [
    { name:'siteOne', url: 'http://www.example.com' },
    { name:'siteTwo', url: 'http://www.google.com' },
    { name:'siteThree', url: 'http://www.google.com' }
    ]

所以,我不想每次都发出请求,但我需要为每个网站发出一个请求 url,而不是创建新的流,结合网站,像这样:

[ html, siteTwo, siteThree]
[ html, siteOne ]

有什么方法可以做到这一点?谢谢

如果您只想为每个唯一数据获取一次数据 url,您可以这样做:

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() 将在您的输入流完成之前将所有唯一的 url 保留在内存中,因此如果您的输入流是无界的,它可能会增长到大量内存使用。