2016-12-05 121 views

回答

1

如果我正確理解你,我會做這樣的:

const Observable = Rx.Observable; 
const Subject = Rx.Subject; 

let subject = new Subject(); 

source = Observable.from([1,2,3,4]) 
    .flatMap(val => subject 
    .withLatestFrom(Observable.of(val), (_, val) => val) 
    .filter(val => val % 2 == 0) 
); 

source.subscribe(val => console.log(val)); 

subject.next(null); 
setTimeout(() => { 
    subject.next(null); 
}, 1000); 

我包裹着另一個可觀測和withLatestFrom運營商發出只有當它的源發射的每個值。在我的情況下,來源是subject,所以我可以完全控制它。然後有filter()可以過濾任何你想要的。

雖然,我不知道是否有任何簡單的解決方案...

這版畫只有兩個值和1後,另外兩個是因爲我叫subject.next(null);setTimeout回調中:

2 
4 
2 
4 

見現場演示: https://jsbin.com/gasumiz/10/edit?js,console

+0

謝謝!我可以確認演示程序的行爲與我的預期相同,但代碼對於這種情況確實看起來有點過分。我會盡量在接下來的幾個小時內將其應用到我記憶中的實際用例中,然後我會回過頭來讓您知道結果。 –