请注意,这个问题是一个澄清问题
我正在尝试向NgRx调度一个动作,该动作会将一个任务添加到任务列表中。之后,我需要向API发出put
请求以存储新更改。问题在于,我需要异步执行此操作,但是this.store.dispatch(...)
返回void
。我感觉这可能是效果派上用场的地方,但是我的问题是:是否有更好的方法可以做到,效果是“正确”的方法。下面的代码仅描述了我目前在做什么。它的工作方式是用户应该点击一个按钮,该按钮会使用适当的参数调用此函数,但是put
请求在this.store.dispatch(...)
完成之前发生,因此它仅记录以前记录的更改,而不是应该的。我可以想到的另一种方法是使用新的更改在this.project
调用中重建projectService.putProject(...)
。哪种方法最好?我意识到这可能是一个非常无知的问题,很抱歉。
createNew(title: string, description: string) {
this.store.dispatch(
AddTask({
payload: {
title: title,
description: description,
projectIndex: this.index,
},
})
);
this.projectService.putProject(this.project).subscribe();
}
答案 0 :(得分:1)
是的,效果是放置此逻辑恕我直言的最佳位置。
您还可以侦听组件本身中的操作(通过使用ActionsSubject
),但是基本上您是在编写自己的效果,因此必须自己处理订阅。有关示例,请参见https://github.com/typebytes/angular-checklist/blob/3a6cf03d06b3e872d92069856c87678bcd6b21c7/src/app/checklist/search/search.service.ts#L26-L32。