RxJS 错误处理

RxJS error handling

本文关键字:处理 错误 RxJS      更新时间:2023-09-26

我遇到了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);
    )

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

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

function thrower(e) {
   throw e;
}

处理此方案的最佳做法是什么。我觉得我缺少一些东西。

异常发生在可观察量之外。您在创建要传递到可观察量的函数时会引发它。

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

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