我需要獲取兩個流的重複項目。我認爲我幾乎可以設法做到這一點,但只有當第二流的重複項目順利進行時纔會這樣做。對於前:RxJs - 獲取兩個可觀察對象的重複項目
這工作:
first = Observable.of(1, 2, 3)
second = Observable.of(2, 3, 1)
但這並不:
first = Observable.of(1, 4, 3)
second = Observable.of(1, 2, 3)
當我的循環獲取到4,它打破:
EmptyError {name: "EmptyError", stack: "EmptyError: no elements in sequence↵ at new Emp…e (http://localhost:4200/vendor.bundle.js:161:22)", message: "no elements in sequence"}
整我代碼在一個功能中,您可以複製/粘貼並測試它:
findDublicates() {
let match = 0; // setting it to 0, so later could assign other number
let keys = []; // list of maching keys
let elementAt = 0; // index of item of first observable
let allKeys$;
let validKeys$;
// counting the length of both observables, so this will be the number of loops
// that checks for dublicates
let allKeysLength;
let validKeysLength;
let allKeysLength$ = Observable.of(2, 1, 4, 5, 7).count()
allKeysLength$.subscribe(val => allKeysLength = val)
let validKeysLength$ = Observable.of(1, 2, 3, 8, 5).count()
validKeysLength$.subscribe(val => validKeysLength = val)
let cycles = Math.min(allKeysLength,validKeysLength); // length of the shorter observable
// wrapping it in a function so when called variables will take new values
function defineObs() {
allKeys$ = Observable.of(2, 1, 4, 5, 7)
.elementAt(elementAt).take(1);
validKeys$ = Observable.of(1, 2, 3, 8, 5)
.filter((x) => (x === match)).first();
}
for (var i=0; i<=cycles; i++) {
defineObs();
allKeys$.subscribe(
function (val) { match = val },
function (err) { console.log(err) },
function() { console.log('Done filter')}
);
validKeys$.subscribe(
function (val) { keys.push(val) },
function (err) { console.log(err) },
function() { console.log('Done push')}
);
elementAt += 1;
cycles -= 1;
}
return console.log(keys);
}
感謝您的任何幫助。
你爲什麼不使用observables來處理這一切。你正嘗試應用一種不同的範式,這種範式對於observables來說效果不好。 – Everest
我也認爲這可能只能用observables來完成,但我是RP的新手,所以不知道該怎麼做 –
所以請隨意展示如何獲得兩個流的重複:) –