Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Modulo 4 API externa e interface - 07 Isolando o acesso à API em um serviço - Erro ao executar projeto

O código está igual ao do projeto (segue abaixo), mas ele sempre retorna esse erro:

Type 'Promise<void | Negociacao[]>' is not assignable to type 'Promise<Negociacao[]>'. Type 'void | Negociacao[]' is not assignable to type 'Negociacao[]'. Type 'void' is not assignable to type 'Negociacao[]'.ts(2322)

O que pode ser?

import { Negociacao, NegociacaoParcial } from '../models/index';
export class NegociacaoService {

    obterNegociacoes(handler: HandlerFunction): Promise<Negociacao[]> {

        return fetch('http://localhost:8080/dados')
            .then(res => handler(res))
            .then(res => res.json())
            .then((dados: NegociacaoParcial[]) => 
                dados
                    .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))     
            )
            .catch(err => console.log(err));
    }
}

export interface HandlerFunction {

    (res: Response): Response
}
5 respostas

Boa noite, Matheus! Como vai?

Experimente escrever assim

obterNegociacoes(handler: HandlerFunction): Promise<void | Negociacao[]> {
     // Restante do código omitido.
}

e veja se as coisas funcionam como vc esperava!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

solução!

Olá, tinha feito isso e parou de dar esse erro, mas ele vai estendendo o erro para as próximas etapas, por exemplo, não consigo fazer um forEach em cima dessa função por ter um void nela. Enfim, acrescentei um "throw new Error ('erro');" no catch e deu certo.

De qualquer forma obrigado :)

export class NegociacaoService {

    obterNegociacoes(handler: HandlerFunction): Promise<Negociacao[]> {

        return fetch('http://localhost:8080/dadosx')
            .then(res => handler(res))
            .then(res => res.json())
            .then((dados: NegociacaoParcial[]) => 
                dados
                    .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))     
            )
            .catch(err => {
                console.log(err);
                throw new Error('Erro');
            });
    }
}

No controller, o retorno de obterNegociacoes() eu coloquei num if, com isso parou de ficar estendendo o erro. Tipo assim:

if(negociacoes)

considerando que negociacoes é o retorno de obterNegociacoes().

Estou com o mesmo erro

Opa, Matheus! A sua solução também é viável! E, dentro da situação que vc mostrou, me parece ser realmente o melhor caminho!

Mauro e Viviane, tentem utilizar a solução do Matheus! Qualquer coisa, se o problema persistir, é só abrir um tópico aqui no fórum da Alura!

Grande abraço a todos e bons estudos, meus alunos!