NgRx调度了无效的操作

时间:2019-03-25 06:12:36

标签: angular typescript ngrx ngrx-effects

这里的问题主要是由于ofType()。我有一个简单的操作,其中用户正在分派类型,然后将请求发送到后端,作为响应,它将返回一个对象数组,该对象将作为新的分派操作传递。问题在于,使用新版本的ngrx无法指定action $的ofType(),因为首先我们需要使用pipe(),因此不会以一种类型处理地图...

这是我的实现方式:

@Effect()
    getGrades = this.actions$
    .pipe(
      ofType(StudentActions.TRY_SET_SUBJECTS),
      mergeMap((action: StudentActions.TrySetSubjects) => {
        const id = action.payload.id;
        return this.httpClient.get(`http://localhost:8080/api/v1/student/${id}/grades`)

      }),
      map((response: any[])  => {
        console.log('StudentEffects -> getGrades')
        const subjects: Subject[] = response

        return [
          new StudentActions.SetSubjects(subjects)
        ]
      })
    );

这是以前版本的工作方式:

@Effect()
    getGrades = this.actions$
    .ofType(StudentActions.TRY_SET_SUBJECTS)
    .pipe(
      mergeMap((action: StudentActions.TrySetSubjects) => {
        const id = action.payload.id;
        return this.httpClient.get(`http://localhost:8080/api/v1/student/${id}/grades`)

      }),
      map((response: any[])  => {
        console.log('StudentEffects -> getGrades')

        const subjects: Subject[] = response

        return [
          new StudentActions.SetSubjects(subjects)
        ]
      })
    );

如何处理响应并使用新版本分发新的StudentActions.SetSubjects(subjects)?

任何提示都会有所帮助,谢谢。

编辑

实际上,地图存在问题。首先,我使用了mergeMap,然后使用map。我将其更改为mergeMap和concatMap。不确定concatMap是否是一个不错的选择,但它会一直等到以前的订阅结束,因此听起来不错。一切正常。

1 个答案:

答案 0 :(得分:2)

这是您要找的吗?

https://subdomain.example.com/friendship