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

时间:2019-05-02 20:24:05

标签: electron rxjs6 redux-observable

我正在将redux-observable与rxjs的tap运算符配合使用来初始化ipcRenderer事件。在此之前,我想调度另一个动作。问题是如何正确地将有效载荷传递给分接运算符? -

注意:我想将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调用

1 个答案:

答案 0 :(得分:0)

我找到了适合我需要的解决方案。我创建了另一个捕捉相同类型的史诗。在点击操作符之后使用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()
);