为什么我的副作用动作无法识别我的返回动作类型属性?

时间:2018-01-07 02:09:52

标签: angular ngrx ngrx-store ngrx-effects

我正在尝试为我的身份验证商店设置SideEffect。每当我触发动作(TrySignIn)时,我都会收到以下错误:

  

" AuthEffects.authSignin"发出了无效的行动

     

错误类型错误:操作必须具有类型属性

我从错误类型的理解是,我的返回操作没有type属性,这不是这里的情况,我将返回两个操作,SIGNINSET_TOKEN他们有类型属性。

如果有人能告诉我这里做错了什么,我很感激,

编辑:

我重现了错误here,您将能够看到我在控制台中收到的相同错误。

我发布了实施的相关代码,

我的身份验证

export class TrySignin implements Action {
  readonly type = TRY_SIGNIN;

  constructor(public payload: Credentials) {}
}

export class Signin implements Action {
  readonly type = SIGNIN;
}

export class SetToken implements Action {
  readonly type = SET_TOKEN;

  constructor(public payload: string) {}
}

我的SideEffect,

@Injectable()
export class AuthEffects {
  @Effect()
  authSignin = this.actions$
    .ofType(AuthActions.TRY_SIGNIN)
    .map((action: AuthActions.TrySignin) => {
      return action.payload;
    }).switchMap(
      (authData: Credentials) => {
         return (this.httpService.postRequest('/Account/Login', (authData)));
      })
      .map(
        (res) => {
          console.log(res['authToken']);
          return [
            {
              type: AuthActions.SIGNIN
            },
            {
              type: AuthActions.SET_TOKEN,
              payload: res['authToken']
            }
          ];

        }
      );

在我的组件中,我解雇了我的行动,

login() {
    this.store.dispatch(new authActions.TrySignin(this.loginForm.value));
}

1 个答案:

答案 0 :(得分:1)

效果会在分派的操作到达商店之前对其进行修改。看起来您正在修改动作中的动作以将其转换(映射)到

Action

^^这是一个数组。它不符合 return { type: AuthActions.SIGNIN } 接口(并且它没有类型属性)。

如果您将其编辑为

mergeMap()

有效吗?

更新

评论中提到:如果您希望自己的行动发送其他操作,请使用@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class BaseGame { @OneToMany(mappedBy="baseGame") public List<CardList> decks; //... lots of other fields } 。它增加了现有的可观察量,而不是取代它。