簡體   English   中英

為什么我的rxjs組合最新輸出只有2次?

[英]Why my rxjs combineLatest output only 2 times?

請考慮以下rxjs@5.5.11代碼:

 { const source1 = Rx.Observable.of(1, 2, 3); const source2 = Rx.Observable.of(4, 5); const combined = Rx.Observable.combineLatest(source1, source2); const subscribe = combined.subscribe(([value1, value2]) => { console.log(`value1 Latest: ${value1}`); console.log(`value2 Latest: ${value2}`); }); } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.11/Rx.min.js"></script> 

我想象這個結果會是這樣的:

(發出1次並持續)

value1 Latest: 3
value2 Latest: 5

要么

(發出3次,並從每個持續)

value1 Latest: 1
value2 Latest: 4
value1 Latest: 2
value2 Latest: 5
value1 Latest: 3
value2 Latest: 5

但實際上它是:

(發出2次,並從每次持續)

value1 Latest: 3
value2 Latest: 4
value1 Latest: 3
value2 Latest: 5

為什么?

這些可觀察者都沒有任何延遲。 訂閱后, source1將立即發出所有值1, 2, 3 然后它訂閱source2 ,它發出的每個值都與source1的最新值3組合在一起。

在每個值之間添加微小延遲將強制每個事件按順序發出。 React甚至會尊重零延遲來強制執行此排序。 結果是它將交替地從每個事件中取一個事件:

{
  const source1 = Rx.Observable.of(1, 2, 3)
    .zip(Rx.Observable.timer(0, 0), (x, _) => x);

  const source2 = Rx.Observable.of(4, 5)
    .zip(Rx.Observable.timer(0, 0), (x, _) => x);

  const combined = Rx.Observable.combineLatest(source1, source2);

  const subscribe = combined.subscribe(([value1, value2]) => {
    console.log(`value1 Latest: ${value1}`);
    console.log(`value2 Latest: ${value2}`);
  });
}
value1 Latest: 1
value2 Latest: 4
value1 Latest: 2
value2 Latest: 4
value1 Latest: 2
value2 Latest: 5
value1 Latest: 3
value2 Latest: 5

視覺解釋可能在這里很好。 原因可能是你的第一個和第二個observable發出如下內容:

First observable:  -----1------2------3
Second observable: -----------------------4-----5
Result:            ---------------------[3,4]--[3,5]

請注意, combineLatest將等到兩個observable都發出值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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