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