【发布时间】:2018-06-25 02:58:59
【问题描述】:
长话短说:我不确定应该在 fromPromise().catch() 方法中捕获哪些错误,以及应该在 onError(error: Error) 观察者方法中解决哪些错误。
我将 node.js 与 rxjs 一起使用,这就是我将 Promise 转换为 observables 的原因。
看看经典的 Promise 定义
const getPromise = (target) => {
return new Promise((resolve, reject) => {
request(
{
url: url,
json: true
},
(error, response, body) => {
if (error) {
reject({
id: id,
error: error,
response: response,
body: body
});
} else {
resolve({
id: id,
body: body
});
}
}
);
});
};
我正在循环中转换我的承诺并返回可观察数组
const observableItems = [];
targetList.forEach((target) => {
const observableItem = {
id: target.id,
observable$: rx.Observable
.fromPromise(getPromise(target))
.catch((error) => {
// [1]
return rx.Observable.of(error);
})
};
observableItems.push(observableItem);
});
return observableItems;
然后我订阅了我的 observables
observableItems.forEach((observableItem) => {
const currentSubscribtion = observableItem.observable$.subscribe(
(payload) => {
if (payload && payload.error) {
handleInvalidPayload(payload);
} else {
handleValidPayload(payload);
}
},
(error) => {
// [2]
}
);
subscribtions.push(currentSubscribtion);
});
我的问题:
1/ 是否可以从 [1] 抛出错误并将其直接传递到点 [2]?此时我在 onNext() 中得到了 if 语句 - 我不喜欢它。
我尝试在 catch() 方法中使用 return Observable.throw(someObject) 没有任何成功。
2/ catch() 和 OnError() 方法中应该解决什么样的错误?
我问的是连接超时、ENOTFOUND 和后端错误,代码如 404?
【问题讨论】:
-
如果您不处理/转换任何内容,只需完全省略
catch?
标签: node.js promise rxjs try-catch