【问题标题】:subscribe method is not triggered with RxJSRxJS 不会触发订阅方法
【发布时间】:2023-03-12 21:22:01
【问题描述】:

我是 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));
  });

我做错了吗?

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    我认为您可能是 observables 冷热性质的又一个受害者。基本上currentExtentMinutes被订阅了两次,一次在第一个代码sn-p中,第二次使用withLatestFrom。每次订阅冷的 observable 都会重新启动生产者,重新生成值(有关更多详细信息,请查看 here)。

    如果这是这里的问题,那么与

    const currentExtentMinutes$ = initialExtentMinutes$
        .merge(selectedExtentMinutes$)
        .distinctUntilChanged()
        .share()
    

    【讨论】:

    • 哈,确实!我很确定这不是一个非常聪明的问题...感谢您这么快回复!
    • 您的挑战将是最后只有一个订阅,在一个可观察的链中。
    猜你喜欢
    • 2021-12-22
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多