我们正在将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()))
);
}),
);
也许我不明白这个问题,但为什么不直接在reducer中对DeleteRelease动作执行乐观更新,所以你的reducer和effect会独立地触发同一个动作。然后,您可以从来自effet的响应中进行“真实”更新。
@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()))
);
}),
);