我是RxJS的初学者, 我目前正在使用RxJS @ 5并且不了解我的代码的行为
const currentExtentMinutes$ = initialExtentMinutes$
.merge(selectedExtentMinutes$)
.distinctUntilChanged()
// We message the worker that
// there is a new extent minutes
currentExtentMinutes$
.subscribe(currentExtentMinutes => {
console.log('send current extent', currentExtentMinutes);
currentExtentMinutes => worker.postMessage({currentExtentMinutes});
});
这很好用,但是只要我添加另一段代码,第一个订阅就不再有效了
sortedTeams$.withLatestFrom(currentExtentMinutes$)
.subscribe(([teams, extent]) => {
const d3line = line()
.x((pt, i) => scaleMinutes.invert(extent[0]) + scaleMinutes.invert(i))
.y(scaleRanking)
.curve(curveCardinal.tension(.5));
const lines = gGraph.selectAll('.team-path').data(teams, _.get('name'));
lines.enter().append('path')
.attr('class', 'team-path')
.style('stroke', team => `rgb(${team.colors[0]})`)
.style('stroke-width', 7)
.style('stroke-linecap', 'round')
.style('stroke-linejoin', 'round')
.style('fill', 'none')
.merge(lines)
.transition(t)
.attr('d', team => d3line(team.ranking));
});
我做错了吗?
答案 0 :(得分:1)
我认为你可能是可观察者的热与冷性质的另一个受害者。基本上currentExtentMinutes
订阅两次,一次在第一个代码段中,第二次使用withLatestFrom
。对cold observable的每次订阅都将重新启动生产者,重新生成值(更多细节看看here)。
如果这是问题所在,那么用
分享你的冷观察就足够了const currentExtentMinutes$ = initialExtentMinutes$
.merge(selectedExtentMinutes$)
.distinctUntilChanged()
.share()