【问题标题】:Angular - Argument of type 'Subscription' is not assignable to parameter of type 'OperatorFunction<unknown, unknown>'Angular - 'Subscription' 类型的参数不可分配给'OperatorFunction<unknown, unknown>' 类型的参数
【发布时间】:2021-06-01 12:40:26
【问题描述】:

在我的 Angular-11 项目中,我在身份验证服务中有以下代码:

login(data: {
  username: string;password: string;rememberMe: boolean
}): Observable < any > {
  const {
    username,
    password,
    rememberMe
  } = data;
  const loginData: OauthInterface = {
    ['grant_type']: PASSPORT_CLIENT.grantType,
    ['client_id']: PASSPORT_CLIENT.clientId,
    ['client_secret']: PASSPORT_CLIENT.clientSecret,
    username,
    password,
    scope: '',
  };
  //  const url = `oauth/token`;
  const url = `${API_URL}/oauth/token`;

  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json',
    })
  };

  return this.http.post < any > (url, loginData, httpOptions)
    .pipe(
      tap(user => rememberMe ? localStorage.setItem('currentUser', JSON.stringify(user)) : ''),
      tap(user => !rememberMe ? sessionStorage.setItem('currentUser', JSON.stringify(user)) : ''),
      tap(user => this.currentUserSubject.next(user)),
      tap(user => this.currentUserSubject.next(user)),
      this.currentUserDetails().subscribe(),
      catchError(error => throwError(error))
    );
}

currentUserDetails(): Observable < any > {
  const url = `${API_URL}/api/user`;
  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json',
    })
  };
  return this.http.get < any > (url, httpOptions)
    .pipe(map(user => {
        this.store.dispatch({
          type: '[APP STATE] set logged in user',
          payload: user
        });
        this.currentUserSubject.next(user);

        return user;
      },
      () => {
        // Error Has been captured by interceptor
      }

    ));
}

我收到了这个错误:

“Subscription”类型的参数不能分配给“OperatorFunction”类型的参数。 类型“订阅”不匹配签名“(来源:Observable):Observable”

这一行被高亮显示:

this.currentUserDetails().subscribe(),

如何解决?

谢谢

【问题讨论】:

    标签: angular


    【解决方案1】:

    要快速解除阻止,请更改:

    this.currentUserDetails().subscribe(),
    

    到:

    tap(_ => this.currentUserDetails().subscribe()),
    

    您只能将运算符放在管道中,而不能放在函数调用中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多