此刻是我的史诗
export const listenToNewDataAdded = (action$, store) =>
action$.pipe(
ofType('FIRED_ACTION'),
mergeMap((action) => {
if (store.value.user === 1) {
const someData = {data: 'data'}
ajax.post(
url,
someData,
{ 'Content-Type': 'application/json' },
)
return [addNotification(someData)]
}
if (store.value.user === 2) {
const someData = {data2: 'data2'}
return [addNotification(someData)]
} else {
return EMPTY
}
catchError((error) => console.log('e:', error))
}),
)
我有几个问题。首先,我如何在RxJS中正确发出ajax请求?我正在导入正确的模块,但未触发。我想我看到一些文档说要将其返回为隐式返回,但是那我将无法在下面运行代码?
其次,catchError
在说不可达的代码。这是有道理的,因为我已经获得了涉及上述情况的所有退货,但是如何捕获错误?文档说要确保将其捕获在mergeMap
内部,否则,如果将其捕获在管道中,则它将终止史诗]
关于如何做到最好的任何想法?
而不是将catchError
RxJS运算符嵌套在mergeMap
中,它应该用作为listenToNewDataAdded
史诗设置的可管道运算符的一部分。
此外,在redux-observables中使用catchError
运算符时,您必须发出一个动作。您可以通过here了解更多有关此内容的信息。
这是解决方法:
export const listenToNewDataAdded = (action$, store) =>
action$.pipe(
ofType('FIRED_ACTION'),
mergeMap((action) => {
// handle logic here
}),
catchError((error) => {
console.log('e:', error);
// emit redux action here
return errorHandlerAction;
})
)