javascript中rxjs5组合的示例

时间:2017-01-07 19:53:25

标签: javascript rxjs rxjs5

总而言之,我已经问过来自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 ]

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

1 个答案:

答案 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()会将所有唯一网址保留在内存中,直到您的输入流完成,因此如果输入流无限制,它可能会增加到大量内存使用。