Olá Lucas!
Entendo sua dúvida e vou tentar te ajudar. O que está acontecendo no seu código é um comportamento comum quando lidamos com Observables
no Angular. Vamos lá:
Quando você faz uma requisição HTTP usando o HttpClient
, ele retorna um Observable
. Esse Observable
é uma representação de um fluxo de dados que pode ser assíncrono. Ou seja, a resposta da requisição não chega imediatamente, e por isso, o Observable
precisa ser "observado" para que possamos reagir quando os dados finalmente chegarem.
No seu método obterContatos
, você está tentando retornar this.contatos
imediatamente após a chamada do subscribe
. No entanto, o subscribe
é assíncrono, o que significa que o retorno de this.contatos
acontece antes mesmo de a resposta da requisição HTTP ter sido recebida e processada. Por isso, this.contatos
acaba sendo retornado vazio ou indefinido.
Para resolver isso, você deve retornar o Observable
do método obterContatos
e fazer o subscribe
onde você realmente precisa dos dados, geralmente no componente. Assim, o componente pode "se inscrever" no Observable
e reagir quando os dados estiverem prontos. Aqui está um exemplo de como isso pode ser feito:
// No seu service
public obterContatos(): Observable<Contato[]> {
return this.http.get<Contato[]>(this.APIContatos)
.pipe(
retry(2),
catchError(this.handleError)
);
}
// No seu componente
ngOnInit() {
this.seuService.obterContatos().subscribe((lista: Contato[]) => {
this.contatos = lista;
});
}
Dessa forma, o componente atua como um Observer
, que se inscreve no Observable
retornado pelo service e atualiza this.contatos
quando os dados são recebidos.
Espero ter ajudado e bons estudos!