RxJS 错误处理

RxJS error handling

我遇到了 RxJS 吞咽错误的问题。所以就我而言,我有这样的东西:

function funcThatThrowsError(fn, ..args) {
     return fn.bind(fn, ...args);
}

function fetchItems() {
     Observable.fromPromise(
        reqwest({
            url: `${API_ROOT}${url}`,
            method,
            data,
            contentType: "application/json"
        })
    ).map(funcThatThrowsError(null, "someValue"))
}

const observableA = fechItems();
const observableB = ... ;

Observable
    .combineLatest(
        observableA,
        observableB,
        () =>  { }
    )
    .forEach(
        () => { }, // success
        (err) -> console.log(err.stack);
    )

所以基本上我故意将空值作为 fn 参数传递,这会导致 funcThatThrowsError 抛出异常。

问题是在这种情况下没有调用错误回调。相反,RxJS 将使用它自己的 thrower 函数

function thrower(e) {
   throw e;
}

处理这种情况的最佳做法是什么。我觉得我缺少了什么。

异常发生在 Observable 之外。您在创建要传递给可观察对象的函数时引发它。

如果你想让链末端的错误处理程序来处理它,你必须在运算符链的内部提出它:

function fetchItems() {
     Observable.fromPromise(
        request({
            url: `${API_ROOT}${url}`,
            method,
            data,
            contentType: "application/json"
        })
    ).map(funcThatThrowsError(content => throw new Error(content), "someValue"))
}