首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将类型为'() => =>‘的参数赋值给类型为’()=> void‘的角度参数

不能将类型为'() => =>‘的参数赋值给类型为’()=> void‘的角度参数
EN

Stack Overflow用户
提问于 2021-06-08 05:51:44
回答 2查看 318关注 0票数 0

我在Angular-11中得到了这个错误处理程序代码:

代码语言:javascript
复制
    return this.api.post('auth/user/login', data, headers).subscribe(
      (result: any) => {
        console.log(result.message);
        console.log(result.code);
        if (result.error === 'true' ){
          console.log(result.message);
        }
      },            
          data => this.tokenHandler(data),
          error => this.errorHandler(error.error)
     );
    }


    errorHandler(error: any){
      this.notify.clear();
    //  console.log(error);
      if (error.errors && error.errors.username){
        this.error = error.errors.username;
      }
      else if (error.message === 'Unauthorized'){
        this.error = null;
        this.notify.error('Invalid Login Details or email not confirmed', {timeout: 0})
      } else {
        this.error = null;
        this.notify.error(error.message, {timeout: 0})
      }
    }

但它导致了以下错误:

代码语言:javascript
复制
Error: src / app / auth.component.ts: 84: 11 - error TS2769: No overload matches this call.
The last overload gave the following error.
Argument of type '(error: any) => void'
is not assignable to parameter of type '() => void'.

84 error => this.errorHandler(error.error) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  node_modules / rxjs / internal / Observable.d.ts: 54: 5
54 subscribe(next ? : (value: T) => void, error ? : (error: any) => void, complete ? : () => void): Subscription;
~~~~~~~~~
The last overload is declared here.


Error: src / app / auth.component.ts: 84: 11 - error TS7006: Parameter 'error'
implicitly has an 'any'
type.

84 error => this.errorHandler(error.error)

突出显示此行:error => this.errorHandler(error.error)

我如何解决这个问题?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-08 06:53:26

这就解释了subscribe(next ? : (value: T) => void, error ? : (error: any) => void, complete ? : () => void): Subscription;

您正在向subscribe传递三个参数(回调),是的。但是,您的第三个回调(错误处理程序)与上述函数定义的第三个参数不匹配。它接受不带参数的回调作为第三个参数。

相反,看起来第一个回调应该从结果中获取令牌(result.data?)在那里调用this.tokenHandler,第二个回调应该是您的错误处理程序。从根本上摆脱data => this.tokenHandler(data),

票数 1
EN

Stack Overflow用户

发布于 2021-06-08 07:19:28

在我看来,errorHandler是在没有参数的情况下被调用。也许传递给它的错误没有error属性?(这意味着error.error是未定义的?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67879093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档