如何将动作的有效负载传递给 redux-observable 中的另一个 rxjs 运算符?

How to pass payload of an action to another rxjs operator in redux-observable?

我正在使用 redux-observable 和 rxjs 的 tap 运算符来初始化 ipcRenderer 事件。在此之前,我想发送另一个动作。问题是如何将 payload 正确传递给 tap operator? -

注意:我想将 tap 运算符保留在序列的末尾

我试图将它传递到操作的有效负载中,但这不是我想要的..检查示例

import { ipcRenderer } from 'electron';
import { map, tap, ignoreElements } from 'rxjs/operators';
import { ofType } from 'redux-observable';
import { pipe } from 'rxjs';

import { togglePackageLoader } from 'models/ui/actions'
import { viewPackageStart} from '../actions';

// I want to pass payload to tap
/* togglePackageLoader returns {  
  type: 'TOGGLE_LOADER',
  payload: {
    loading: true,
    options: {
      opt1: value1,
    }
  }
}

// i want to avoid passing options to toggleLoader payload..
*/
const viewPackageEpic = pipe(
    ofType(viewPackageStart.type),
    map(({ payload }) => togglePackageLoader({
        loading: true,
        options: payload
    })),
    tap(({ payload: { options } }) => {
        ipcRenderer.send('npm-view', options)
    }),
    ignoreElements()
);

export { viewPackageEpic };

我希望先调度 toggleLoader 然后调用 ipcRenderer

我找到了适合我需要的解决方案。我创建了另一个捕获相同类型的史诗。在点击运算符之后使用 ignoreElements。

const viewPackageEpic = pipe(
    ofType(viewPackageStart.type),
    map(() => updatePackageLoader({
        loading: true
    })),
);

const viewPackageLoaderEpic = pipe(
    ofType(viewPackageStart.type),
    tap(({ payload: { options } }) => {
        ipcRenderer.send('npm-view', options)
    }),
    ignoreElements()
);