【问题标题】:getting TypeError: .finalize is not a function in Rxjs6获取 TypeError: .finalize 不是 Rxjs6 中的函数
【发布时间】:2018-05-29 17:05:28
【问题描述】:

在以下函数中,我收到运行时错误TypeError: this.authService.authServiceSigninUser(...).map(...).catch(...).finalize is not a function

问题 1) 为什么 Typescript 在编译时没有捕捉到这个错误?我怎么能在编译时发现这个错误。

问题 2) 我该如何解决这个错误?我尝试同时使用 finallyfinalize 但两者都不起作用。

public signinUser(user:UserSigninInfo):any{

    this.loaderService.show(); //this shows a spinner
    return this.authService.authServiceSigninUser(user)
      .map(response=>{
        console.log('response from backend service',response);
        let result= <HttpResponse<any>>response; 
        let authToken = result.headers.get("x-auth-token")
        if(authToken == null) {
          console.log("no authToken")
        } else {
          console.log("authToken is ",authToken)
          localStorage.setItem('id_token', authToken);
        }
        return result;
      })
      .catch(this.handleError)
    .finally(()=> this.loaderService.hide()) //hide the spinner
  }

【问题讨论】:

    标签: angular6 rxjs6


    【解决方案1】:

    在你的组件中导入这一行

    从 'rxjs/operators' 导入 {finalize,catchError,tap};

    试试这个代码

     public signinUser(user:UserSigninInfo):any{
    
        this.loaderService.show(); //this shows a spinner
        return this.authService.authServiceSigninUser(user)
          .pipe(tap(response=>{
            console.log('response from backend service',response);
            let result= <HttpResponse<any>>response; 
            let authToken = result.headers.get("x-auth-token")
            if(authToken == null) {
              console.log("no authToken")
            } else {
              console.log("authToken is ",authToken)
              localStorage.setItem('id_token', authToken);
            }
            return result;
          })
          ,catchError(this.handleError)
        ,finalize (()=> this.loaderService.hide())); //hide the spinner
      }
    

    【讨论】:

    • 谢谢。会尝试的。顺便说一句,finally 也可以工作吗?
    • 如果你想使用 finally 意味着在你的 package.json 文件中使用 rxjs-compact 包
    • 我在 package.json 中有 "rxjs-compat": "^6.2.0" 所以我的原始代码不应该工作吗?
    • 您的代码有效。如果您能告诉我为什么我的逻辑不起作用,我将不胜感激,即使我在package.json 中有rxjs-compact
    • @ManuChadha rxjs-compact 包支持 Angular5 包而不是 Angular6 包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2018-11-25
    • 2021-12-03
    • 2017-05-15
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多