我们正在将NGRX库集成到我们工作的公司的一个项目中,我们希望在前端执行乐观更新,而不是等待服务器响应执行某些操作。我们尝试使用的是startWith
运算符,但是它抛出了Action properly
,然后由于releaseService.deleteRelease
方法没有返回操作,它抛出了invalid action: null
错误
我们尝试将{dispatch: false}
配置添加到@Effect
,但是随后不会引发第一个操作...
尽管如此,我们也打算使用tap
运算符并将一些操作直接发送到商店,但是我们认为这是一种反模式。
因此,可以在不创建splitter
中间动作的情况下实现这一目标吗?谢谢。
@Effect()
deleteRelease$ = this.actions$.pipe(
ofType(ReleaseCardActions.ReleaseCardActionTypes.DeleteRelease),
exhaustMap((action: ReleaseCardActions.DeleteRelease) => {
return this.releaseService.deleteRelease(action.id).pipe(
startWith(new DeleteReleaseSuccess(action.id)),
catchError(() => of(new ReleasesApiActions.DeleteReleaseFailure()))
);
}),
);
答案 0 :(得分:0)
也许我听不懂这个问题,但是为什么不直接在化简器中对 DeleteRelease 操作执行乐观更新,因此您的化简器和效果将独立地针对同一操作触发。 然后,您可以根据来自效果的响应进行“实际”更新。
@Effect()
deleteRelease$ = this.actions$.pipe(
ofType(ReleaseCardActions.ReleaseCardActionTypes.DeleteRelease),
exhaustMap((action: ReleaseCardActions.DeleteRelease) => {
return this.releaseService.deleteRelease(action.id).pipe(
map(new DeleteReleaseSuccess(action.id)),
catchError(() => of(new ReleasesApiActions.DeleteReleaseFailure()))
);
}),
);