我想测试一个observable发出的每个值,如果它符合某些条件,那么错误输出结果,否则传递值。这有运营商吗?
答案 0 :(得分:1)
如果您使用Click to add circle.
<canvas id=canvas></canvas>
,则可以将与条件不匹配的案例分开,但它们会立即终止。
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')
);
您还可以在bash中考虑Next: 1
Error: Out Of Condition: 2
和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}`);
}
});
答案 1 :(得分:0)
我不知道这是否是正确答案,但对我有用的是Observable.create
Observable.create((observer: Observer) =>
sourceObservable.subscribe((val: Value) => {
if(condition)
observer.next(val);
else
observer.error(val);
}, observer.error, observer.complete)
)
这非常不优雅。我希望有更好的方法