【问题标题】:error TypeError: Cannot read property 'pipe' of undefined ngxs logout错误类型错误:无法读取未定义的 ngxs 注销的属性“管道”
【发布时间】:2021-09-06 05:39:27
【问题描述】:

我从 auth.state 调用注销方法。我收到以下错误:

错误类型错误:无法读取未定义的属性“管道”

@Action(Logout)
logout(ctx: StateContext<AuthStateModel>) {
  return this.loginService.logout().pipe(
    tap((result) => {
    const state = ctx.getState();
      ctx.setState({...state,
          loggedInUser:undefined,
          accessToken: undefined,
          username: undefined,
          email:undefined,
          roles:undefined,
        });
     })
  );
}

这是logOut 方法

public logout(): Observable<void> {
   return this.tokenStorage.signOut();
}

这是来自localstoragesignOut 方法

public signOut():any {
   return window.sessionStorage.clear();
}

错误图片:

【问题讨论】:

  • 为什么将signOut()的返回类型设置为any? window.sessionStorage.clear() 返回 void,而不是 Observable。让它返回一个可观察的,或者只是取出不必要的可观察流。

标签: angular typescript ngxs


【解决方案1】:

你确定window.sessionStorage.clear()有返回值吗?

clear() 是一个 void 方法,这就是您收到该错误的原因。

您可以在以后使用console.log(window.sessionStorage.clear()) 简单地检查类似的问题,然后您将得到它是否返回值或未定义。

【讨论】:

  • 当我使这些方法无效时,我得到错误:src/app/pages/login/state/auth.state.ts:74:37 - 错误 TS2339:属性“管道”不存在在类型“无效”上。
【解决方案2】:
@Action(Logout)
logout(ctx: StateContext<AuthStateModel>) {
 this.loginService.logout()
    const state = ctx.getState();
      ctx.setState({...state,
          loggedInUser:undefined,
          accessToken: undefined,
          username: undefined,
          email:undefined,
          roles:undefined,
        });
        return state;
 };

我用这个替换了代码......谢谢帮助......我应该问另一个问题,上面这个......问题实际上是(属性管道在类型 void 上不存在)但我有点迷失在代码中...... . :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-12-03
    • 2021-11-22
    相关资源
    最近更新 更多