Javascript 如何格式化RxJS redux可观察史诗来做很多事情?
这是我此刻的史诗Javascript 如何格式化RxJS redux可观察史诗来做很多事情?,javascript,rxjs,redux-observable,Javascript,Rxjs,Redux Observable,这是我此刻的史诗 export const listenToNewDataAdded = (action$, store) => action$.pipe( ofType('FIRED_ACTION'), mergeMap((action) => { if (store.value.user === 1) { const someData = {data: 'data'}
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
中捕捉到它,否则如果您在管道中捕捉到它,它将终止epic
关于如何最好地做到这一点,您有什么想法吗?与其将
catchError
RxJS操作符嵌套在mergeMap
中,不如将其用作您为listenToNewDataAdded
epic设置的可管道操作符的一部分
此外,在redux observables中使用catchError
操作符时,必须发出动作。你可以在上面读到更多关于这方面的内容
以下是您可以修复它的方法:
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;
})
)
export const listenToNewDataAdded=(action$,store)=>
动作$.pipe(
ofType('FIELED_ACTION'),
合并映射((操作)=>{
if(store.value.user==1){
const someData={data:'data'}
返回ajax.post(
网址,
一些数据,
{'Content-Type':'application/json'},
).烟斗(
映射到([addNotification(someData)])
);
}
if(store.value.user==2){
const someData={data2:'data2'}
返回[addNotification(someData)];
}否则{
返回空;
}
}),
//必须返回一个可观察的
catchError((error)=>of('err'))
);
您以前使用的catchError
方法根本没有效果。它是一个可管道化操作符,还请注意,传递给它的回调函数必须返回一个可观察的/
我正在导入正确的模块,但它没有启动
您可以使用其他操作符修改
ajax
返回的可观测值。它的重要方面是确保您返回可观察对象,以便mergeMap
可以订阅它并传递其值。嘿,我的回答解决了您的问题吗?嘿@wentjun对不起,我忘了标记它了!我用同样的解决方案在同一时间解决了这个问题,但我会把你的答案标记为正确,并放弃投票。可以自由地回报;)