【问题标题】:Rxjs parallel subscribersRxjs 并行订阅者
【发布时间】:2017-11-01 23:26:49
【问题描述】:

我有以下代码

x = new Rx.Subject()
z = new Rx.Subject()
loop = 900000000;

x
  .do(() => console.log('x start'))
  .do(() => { let i = loop; while(i--) continue })
  .subscribe(() => console.log('x end'))

z
  .do(() => console.log('z start'))
  .do(() => { let i = loop; while(i--) continue })
  .subscribe(() => console.log('z end'))

x.subscribe(z)

如果我向x 发送一个新事件,这将是输出:

z start
z end
x start
x end

但我需要订阅并行发生,并将其记录为

x start
z start
x end
z end

我不介意顺序。

我尝试添加.subscribeOn(Rx.Scheduler.async),但结果是一样的。

查看示例here

【问题讨论】:

  • 恭喜您找到了我见过的调度程序参数的少数用例之一。
  • 哈哈谢谢!

标签: javascript rxjs rxjs5


【解决方案1】:

看来你需要.observeOn()

console.clear()
const x = new Rx.Subject();
const z = new Rx.Subject();
const loop = 900000000;

x
  .do(() => log('x start'))
  .do(() => { let i = loop; while(i--) continue })
  .observeOn(Rx.Scheduler.async)
  .subscribe(() => log('x end'));

z
  .do(() => log('z start'))
  .do(() => { let i = loop; while(i--) continue })
  .observeOn(Rx.Scheduler.async)
  .subscribe(() => log('z end'));

x.subscribe(z);

document
  .querySelector('#next')
  .addEventListener('click', () => x.next());

function log(data) {
  const logs = document.querySelector('#logs');
  const log = document.createElement('p');
  log.innerText = data;
  logs.appendChild(log);
}

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2021-02-14
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多