RxJS结合两个可观察到的

透明质酸

我正在尝试合并两个Obs1和Obs2。Obs1发送5,6,7。Obs2发送1,2,3,4。我正在总结-> concat(Obs2,Obs1)

预期我的订户中有1,2,3,4,5,6,7,但只得到1,2,3,4。我究竟做错了什么?

let Obs1 = new rxjs.Subject();
let Obs2 = new rxjs.Subject();

function sendToObs1(x){ 
    Obs1.next(x)
}

async function sendToObs2(){
  let trns = await getValues();
  for(let i = 0; i < trns.length; i++){
    Obs2.next(trns[i])
  }
  Obs2.complete()
}

function getValues(){
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve([1,2,3,4]), 10)
  })
};

rxjs.concat(Obs2, Obs1).subscribe({
  next: x=> console.log("Received: " + x),
  complete: () => console.log("Done")}
)
sendToObs2()

sendToObs1(5)
sendToObs1(6)
sendToObs1(7)

//Output
// Received: 1 
// Received: 2 
// Received: 3 
// Received: 4


//Expected
// Received: 1 
// Received: 2 
// Received: 3 
// Received: 4
// Received: 5
// Received: 6
// Received: 7
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.1.0/rxjs.umd.js"></script>

克里斯·拉莫特(Chris Lamothe)

Concat仅在Obs2的onComplete之后订阅

let Obs1 = new rxjs.ReplaySubject();
let Obs2 = new rxjs.Subject();

function sendToObs1(x){ 
    Obs1.next(x)
}

async function sendToObs2(){
  let trns = await getValues();
  for(let i = 0; i < trns.length; i++){
    Obs2.next(trns[i])
  }
  Obs2.complete()
}

function getValues(){
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve([1,2,3,4]), 10)
  })
};

rxjs.concat(Obs2, Obs1).subscribe({
  next: x=> console.log("Received: " + x),
  complete: () => console.log("Done")}
)
sendToObs2()

sendToObs1(5)
sendToObs1(6)
sendToObs1(7)

//Output
// Received: 1 
// Received: 2 
// Received: 3 
// Received: 4


//Expected
// Received: 1 
// Received: 2 
// Received: 3 
// Received: 4
// Received: 5
// Received: 6
// Received: 7
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.1.0/rxjs.umd.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章