NgRx在分派动作后执行动作(异步)

时间:2020-07-01 15:11:36

标签: angular typescript ngrx

请注意,这个问题是一个澄清问题

我需要做什么

我正在尝试向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();
  }

1 个答案:

答案 0 :(得分:1)

是的,效果是放置此逻辑恕我直言的最佳位置。 您还可以侦听组件本身中的操作(通过使用ActionsSubject),但是基本上您是在编写自己的效果,因此必须自己处理订阅。有关示例,请参见https://github.com/typebytes/angular-checklist/blob/3a6cf03d06b3e872d92069856c87678bcd6b21c7/src/app/checklist/search/search.service.ts#L26-L32