开发者问题收集

NgRx 发送了一个无效的操作

2019-03-25
566

这里的问题主要是因为 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个回答

这是您要找的吗?

在此处输入图片描述

timdeschryver
2019-03-25