1
resposta

Problema com forEach

Olá estou com um problema para inserir dados retornados da api, dentro de uma variável do tipo array de string, o console retorna esse erro main.js:1 ERROR TypeError: e.forEach is not a function

Segue o código da classe TS

export class ListarQrCodeComponent implements OnInit {

  private CONTENT_TYPE_JSON = 'application/json';
  private CONTENT_TYPE_FORM_DATA = 'application/x-www-form-urlencoded';
  private ACCEPT = 'application/json';

  elementType = NgxQrcodeElementTypes.URL;
  correctionLevel = NgxQrcodeErrorCorrectionLevels.HIGH;

  qrCodes : Observable<QrCode[]>;
  values: string[] = [];

  idVenda : any;

  constructor(activatedRouter: ActivatedRoute, private service:ListarQrService,) {
    this.idVenda = activatedRouter.snapshot.paramMap.get('idVenda');
  }

  ngOnInit() {

    this.qrCodes = this.service.getQrCodes(this.idVenda);
    this.qrCodes.subscribe((res: QrCode[]) => {
      res.forEach((element: QrCode) => {
        this.values.push(element.cod);
      });
    });
  }

e o código do modelo QrCode

export class QrCode {

  cod:string;

}

O que devo fazer para corrigir isso ?

1 resposta

Provavelmente o objeto retornado por esse método getQrCodes não é um Array de QrCode, como você tipou. Um forte indício é que está reclamando que não possui o método forEach, que faz parte do protótipo de Array - se fosse um array, encontraria o método e não daria esse erro. Lembre-se que a tipagem do Typescript apenas dá dicas para o compilador dos tipos esperados, mas não tem o condão de forçar esses tipos nos objetos.

Coloque um "console.log(res)" logo antes da linha com o forEach e veja a estrutura do objeto que será printado no console. É possível que seja um objeto com a propriedade "data", por exemplo, e esse sim seja o Array de QrCode. Nesse caso basta fazer um "let arr = res.data", e fazer o foreach na variável arr.