[英]RxJS concat two observables
我正在嘗試連接兩個 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>
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.