听起来像是您想要的:如果一部史诗想要开始另一部史诗作品,并等待其完成再继续。
一种方法是(使用伪名称),当您收到初始操作时,
LOAD_OTHER_DATA您会立即开始侦听单个
SAVE_FORM_FULFILLED,这表明表单已保存(稍后将开始)。收到后,我们
mergeMap(或
switchMap在这种情况下无关紧要)将其加载到调用中以加载其他数据
loadOtherDataSomehow()并进行常规业务。最后,启动我们正在等待的表单的实际保存的窍门是
startWith()在整个链的末尾添加一个-
它将发出并分派实际保存表单的操作。
const saveFormEpic = (action$, store) => action$ .ofType('SAVE_FORM') .switchMap(() => saveFormSomeHow(store.getState().formDataSomewhere) .map(details => ({ type: 'SAVE_FORM_FULFILLED' })) );const loadOtherDataEpic = action$ => action$ .ofType('LOAD_OTHER_DATA') .switchMap(() => action$.ofType('SAVE_FORM_FULFILLED') .take(1) // don't listen forever! importANT! .mergeMap(() => loadOtherDataSomeHow() .map(otherData => ({ type: 'LOAD_OTHER_DATA_FULFILLED', payload: otherData })) ) .startWith({ type: 'SAVE_FORM' }) );您没有提到加载和保存的工作方式,因此这只是您需要针对用例进行修改的伪代码。



