类型错误:[某些函数] 不是角度服务中的函数

问题描述

您好,我在理解这个问题时遇到了麻烦。我想将服务中某些错误的验证拆分到不同的文件中,因此我创建了此文件

import { HttpErrorResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { throwError } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class RestErrorHandlerService {

  constructor() { }

  handleCreteAndEditErrors(error: HttpErrorResponse){
    let errorMessage = '';

    // Validate HTTP ERROR
    if (error instanceof HttpErrorResponse){
      switch(error.status){
        case 500:
          errorMessage = 'Internal server error 500.';
          break;
        case 404:
          errorMessage = 'API endpoint not found.';
          break;
        case 403:
          errorMessage = 'Permission denied.';
          break;
        case 400:
          errorMessage = this.getBadRequestErrors(error);
          // if(error.error){
          //   const errors: string[] = [];
          //   errors.push('Invalid data:');
          //   const fields = Object.keys(error.error);
          
          //     // Loop through all errores returned by backend and print them
          //   fields.forEach((field: string) => {
          //     error.error[field].forEach((element: string) => {
          //       console.log(element);
          //       // Print each field with the error in caps
          //       errors.push(field.charat(0).toupperCase() + field.substring(1) + ': ' + element);
          //     });
          //   });
          //   errorMessage = String(errors);
          // }
          // if (!errorMessage){
          //   errorMessage = 'There was a problem sending the request. Bad request.';
          // }
          break;
        default:
          errorMessage = 'There was a problem trying to send the request.';
          break;
      }
    }

    return throwError(errorMessage);
  }
  
  getBadRequestErrors(error: HttpErrorResponse): string{
    let errorMessage;
    if(error.error){
      const errors: string[] = [];
      errors.push('Invalid data:');
      const fields = Object.keys(error.error);
    
        // Loop through all errores returned by backend and print them
      fields.forEach((field: string) => {
        error.error[field].forEach((element: string) => {
          console.log(element);
          // Print each field with the error caps
          errors.push(field.charat(0).toupperCase() + field.substring(1) + ': ' + element);
        });
      });
      errorMessage = String(errors);
    }
    if (!errorMessage){
      errorMessage = 'There was a problem sending the request. Bad request.';
    }
    return errorMessage;
  }
  
}

现在我想将错误 400 拆分为一个函数,因此我从那里注释了代码,并编写了新函数 getBadRequestErrors。每次我编写这样的代码时,它都会抛出相同的异常。如果我以相同的方法拥有所有内容,则它可以工作:

 TypeError: this.getBadRequestErrors is not a function 

我是从另一个这样的服务调用它的:

@Injectable({
  providedIn: 'root'
})
...
  constructor(
    ...
    private restErrorHandleService: RestErrorHandlerService,) {}

  someMethod(object: Object{

    const url = this.hostname + '/api/v1/something/';

    return this.http.post(url,object).pipe(
        catchError(this.restErrorHandleService.handleCreteAndEditErrors),);
  }

我曾尝试创建一个愚蠢的函数,例如:

hello(){
console.log("Hi");
}

并从 handleCreteAndEditErrors 调用它,它也不会被调用

为什么我无法从该服务创建函数?看起来和其他的完全一样,是使用 cli 创建的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)