Итак, если вы хотите отправить более одного действия из эффекта, вы можете вернуть массив действий и заменить map
на mergeMap
:
@Effect()
uploadSpecChange$: Observable<Action> = this.actions$.pipe(
ofType(AppActions.WorkspaceActionTypes.UploadChange),
switchMap((x: any) => {
let f = new FileReader();
f.readAsText(x.payload);
return fromEvent(f, 'load');
}),
mergeMap((result: any) => {
const raw = (<FileReader>result.target).result as string;
const res = JSON.parse(raw);
// console.log(res);
return [
new AppActions.UploadComplete(res),
new AppActions.PerformCalc()
];
})
);
Однако, если вы хотитеPerformCalc
действие, которое будет отправлено после выполнения действия UploadComplete
, вы должны отправить PerformCalc
в качестве побочного эффекта UploadComplete
:
@Effect()
uploadSpecChange$: Observable<Action> = this.actions$.pipe(
ofType(AppActions.WorkspaceActionTypes.UploadChange),
switchMap((x: any) => {
let f = new FileReader();
f.readAsText(x.payload);
return fromEvent(f, 'load');
}),
map((result: any) => {
const raw = (<FileReader>result.target).result as string;
const res = JSON.parse(raw);
// console.log(res);
return new AppActions.UploadComplete(res);
})
);
@Effect()
uploadComplete$: Observable<Action> = this.actions$.pipe(
ofType(AppActions.WorkspaceActionTypes.UploadComplete),
map(() => new AppActions.PerformCalc())
);