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