簡體   English   中英

RxJS 連接兩個 observable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM