1
我想測試一個可觀察對象發出的每個值,如果它符合某些標準,則將結果錯誤輸出,否則傳遞該值。這是否有運營商?如何管道可觀察對象
我想測試一個可觀察對象發出的每個值,如果它符合某些標準,則將結果錯誤輸出,否則傳遞該值。這是否有運營商?如何管道可觀察對象
如果您使用throw
,您可以將不符合條件的情況分開,但它們會立即終止。
let source = Observable.of(1,2,3);
source
.mergeMap(value => {
if (value > 1) { // condition
return Observable.throw(`Out Of Condition: ${value}`);
}
return Observable.of(value);
})
.subscribe(
value => console.log(`Next: ${value}`),
error => console.log(`Error: ${error}`),
() => console.log('completed')
);
結果:
Next: 1
Error: Out Of Condition: 2
你也可以認爲像在bash stdout
和stderr
方式。爲此,增加了其他信息。在這種情況下,它不會在中間結束。
const stdout = 1;
const stderr = 2;
let source = Observable.of(1,2,3);
source
.map(value => {
if (value > 1) { // condition
return [stderr, value];
}
return [stdout, value];
})
.subscribe(channel_value => {
let channel = channel_value[0];
let value = channel_value[1];
if (channel == stdout) {
console.log(`stdout: ${value}`);
}
else if (channel == stderr) {
console.log(`stderr: ${value}`);
}
});
結果:
stdout: 1
stderr: 2
stderr: 3
我不知道這是否是正確的答案,但什麼工作對我來說,是Observable.create
Observable.create((observer: Observer) =>
sourceObservable.subscribe((val: Value) => {
if(condition)
observer.next(val);
else
observer.error(val);
}, observer.error, observer.complete)
)
這是非常不雅。我希望有更好的方法
我認爲你正在尋找的運營商是[每](http://reactivex.io/rxjs/class/es6/Observable.js~Observable .html#instance-method-every) – Maxime
順便說一句,對於這類問題,請使用Gitter而不是stackoverflow – Maxime
什麼是Gitter?爲什麼它比stackoverflow更好? –