2017-11-01 8 views
3

私はxに新しいイベントを送信する場合、これが出力されます、次のコードRxjs並列加入者

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) 

を持っています、

z start 
z end 
x start 
x end 

しかし、私は並行して発生するサブスクリプションが必要

x start 
z start 
x end 
z end 

私は注文について気にしません。

私は.subscribeOn(Rx.Scheduler.async)を追加しようとしましたが、結果は同じです。

チェックアウトの例here

+0

おめでとうを必要とするように見えます。 –

+0

haha​​ありがとう! – Diestrin

答えて

4

は、あなたが、私は、スケジューラのパラメータに見てきたいくつかのユースケースのいずれかを見つけるための.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); 
} 
+0

素晴らしいです、それは動作します。ありがとうございました – Diestrin

関連する問題