我需要创建Epic A,它将发出Action B,从而启动Epic B,它将执行一些异步操作并最终发出Action C,同时Epic A设置Action C的侦听器并当接收到它时,它将发出动作D,从而完成监听动作C,直到再次被调用。 另外...如果Epic B返回动作E(失败案例),则Epic A也完成了对动作C的监听。
答案 0 :(得分:0)
import { mergeMap, map, take, takeUntil, withLatestFrom } from 'rxjs/operators';
import { merge, of } from 'rxjs';
import { ofType } from 'redux-observable';
const smth = ($action, $state) =>
$action.pipe(
ofType('action-a'),
withLatestFrom($state),
mergeMap(([action, state]) => {
const someData = someSelector(state);
return merge(
of({ type: 'action-b', someData }),
$action.pipe(
ofType('action-c'),
map(() => {
return {
type: 'action-d',
};
}),
take(1),
takeUntil($action.pipe(ofType('action-e')))
)
);
})
);
export default smth;
在上面的代码中,我们实例化了epic,它将在收到action-a
时运行其内容。
它还返回一个动作和一个侦听器(我们称其为Sub-Epic)。
操作为action-b
,完成后将发出action-c或action-e(失败情况)
Sub-Epic本身会监听action-c
的发生,我们只接受一次,直到收到action-e
为止,因为我们希望action-d
仅发生一次。
我们运行action-d
是由于重新运行action-a
要运行该代码...我们可以致电dispatch({ type: 'action-a' });