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