检查observable

时间:2018-02-26 19:13:54

标签: javascript rxjs

我正在尝试检查是否有一个可观察的观察者提供的错误处理程序。

我想要这个的原因是因为我想要以下用例:

  • 如果观察者提供了错误处理程序,则在抛出错误时使用它
  • 否则,如果观察者未提供错误处理程序,请使用默认错误处理逻辑

实现这一目标的唯一方法是了解是否提供了错误处理程序(除非我有其他缺失方式)。

这是我正在做的一个例子:

foo = Observable.from([...]).catch((err, selector) => {
    // Do something...
});

foo.subscribe(
    () => console.log('Success'),
    () => console.log('Error'),
    () => console.log('Finally'),
);

我想要做的是,在“Do something”注释的第一个块中,我想检查订阅流的观察者是否提供了错误处理程序,这是这一部分:

// ...
() => console.log('Error'),
// ...

我试图访问selector中的属性,如下所示:

foo = Observable.from([...]).catch((err, selector) => {
    console.log(selector);
});

...但不清楚哪个属性(或其深层嵌套的子属性)代表观察者提供的错误处理程序。

这些信息甚至可以从一个可观察的信息中检索吗?我想处理程序必须存储在某处,否则在抛出错误时如何为观察者触发它?

RxJS文档上的任何内容似乎都没有解释如何检索观察者设置的错误处理程序。

任何帮助都将不胜感激。

以下是我想要实现的大局的伪代码:

foo = Observable.from([...]).catch((err, selector) => {
    if (selector.catch) {
        return Observable.throw(err)
    } else {
        // Do something else to handle the error, but don't throw anymore since the observer isn't listening for an error.
        console.log('Doing something else...');
        return Observable.empty();
    }
});

// On error, "Error" will be logged
foo.subscribe(
    () => console.log('Success'),
    () => console.log('Error'),
    () => console.log('Finally'),
);

// On error, "Doing something else..." will be logged
foo.subscribe(
    () => console.log('Success')
);

0 个答案:

没有答案