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 保留在内存中,因此如果您的输入流是无界的,它可能会增长到大量内存使用。
大家好,我问过 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 保留在内存中,因此如果您的输入流是无界的,它可能会增长到大量内存使用。