如何管道可观测量

时间:2017-05-28 18:15:30

标签: rxjs observable

我想测试一个observable发出的每个值,如果它符合某些条件,那么错误输出结果,否则传递值。这有运营商吗?

2 个答案:

答案 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)
)

这非常不优雅。我希望有更好的方法