如何格式化RxJS redux可观察的史诗来做很多事情?

问题描述 投票:0回答:1

此刻是我的史诗

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内部,否则,如果将其捕获在管道中,则它将终止史诗]

关于如何做到最好的任何想法?

javascript rxjs redux-observable
1个回答
0
投票

而不是将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;
        })
    )
© www.soinside.com 2019 - 2024. All rights reserved.