Итак, мое решение ниже.Я решил не отправлять действие прямо из эффекта, поэтому я использую хранилище для отправки действия только тогда, когда мне нужно.
@Effect({ dispatch: false })
public createMediaItem: Observable<void> = this._actions
.pipe(
ofType(MediaItemActionTypes.MediaItemCreateAction),
map((action: MediaItemCreateAction) => action),
mergeMap(action => {
return this._uploadService.createMediaItem(action.formData)
.pipe(
map((event: HttpEvent<HttpEventType>) => {
switch (event.type) {
case HttpEventType.UploadProgress: {
action.fileItem.progress = Math.round(event.loaded / event.total * 100);
break;
}
case HttpEventType.Response: {
this._store.dispatch(new MediaItemCreateSuccessAction(action.fileItem, event.body));
break;
}
default:
break;
}
}),
catchError(error => of(this._store.dispatch(new MediaItemCreateFailAction(action.fileItem, error))))
);
})
);