Meu componente que chama o service
salvar() {
if (this.pessoa.controls.tipoPessoa.value !== "") {
this.publicoService
.novoContato({
fisica: this.fisica,
juridica: this.juridica,
evento: this.evento,
})
.subscribe({
next: (httpReturn) => {
this.toastrService.success(httpReturn["texto"]);
},
error: (e: any) => {
this.errorService.error(e);
},
});
}
}
Meu service
constructor(private http: HttpClient, private errorService: ErrorService) {}
novoContato(modelo: ContatoModel) {
return this.http
.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.pipe(take(1));
}
Mostra esta mensagem
Mas do servidor retorna isto
Configuração do angular
"@angular/animations": "^13.1.1",
"@angular/cdk": "^13.1.1",
"@angular/common": "^13.1.1",
"@angular/compiler": "^13.1.1",
"@angular/core": "^13.1.1",
"@angular/forms": "^13.1.1",
"@angular/localize": "^13.1.1",
"@angular/material": "^13.1.1",
"@angular/platform-browser": "^13.1.1",
"@angular/platform-browser-dynamic": "^13.1.1",
"@angular/router": "^13.1.1",
Nâo tenho certeza, mas achei estranho seu subscribe
está recebendo um objeto ({}
). Pesquisando aqui, parece que deveria ser algo assim:
http.subscribe(
res => console.log('HTTP response', res),
err => console.log('HTTP Error', err),
() => console.log('HTTP request completed.')
);
Nesse exemplo, o subscribe
recebe 3 funções: A primeira para caso de sucesso (2xx), a segunda para caso de erro (4xx ou 5xx), e a terceira que será sempre executada.
É bem possível que a forma como vc fez seja algo que eu não conheça. Inclusive é a primeira vez que vejo usando dessa forma. De qualquer forma, faça um teste como no exemplo que passei para ver o que acontece.
FONTE: RxJs Error Handling: Complete Practical Guide
1 curtida
this.publicoService
.novoContato({
fisica: this.fisica,
juridica: this.juridica,
evento: this.evento,
})
.subscribe(
(res) => console.log("HTTP response", res),
(err) => console.log("HTTP Error", err),
() => console.log("HTTP request completed.")
);
Ele sempre vai para o Erro, só que imprimi ok , ao invés de imprimir o que vem do servidor. parece que não espera.
Do jeito que está ele vai para o metodo
/** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */
subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;
Pelo que entendi, deve ser este
subscribe(
observerOrNext?: Partial<Observer<T>> | ((value: T) => void) | null,
error?: ((error: any) => void) | null,
complete?: (() => void) | null
): Subscription {
Qual o código http que essa requisição está retornando quando retorna erro?
1 curtida
Não consegui pegar
A mensagem está aqui, mas depois, parece que perde.
Tente não utilizar o pipe
take
, para ver o que acontece.
1 curtida
Pus tudo no service
novoContato(modelo: ContatoModel) {
this.http
.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.subscribe({
next: (httpReturn) => {
this.toastrService.success(httpReturn["texto"]);
},
error: (error) => {
console.error("There was an error!", error);
},
});
}
Não funcionou, imprimiu There was an error! OK
Estranho pq erro 400 foi que a requisição foi feita de forma errada (algum parametro obrigatorio faltando ou no tipo errado, por exemplo). Vc consegue ver se apareceu algum erro no backend?
1 curtida
O erro, 400. eu retorno do back. No angular 12, 11, 10, 9, sempre foi desta forma, e sempre foi mostrada a mensagem de retorno do back
E se deixar assim, o que acontece?
novoContato(modelo: ContatoModel) {
this.http.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.subscribe((res) => {
this.toastrService.success(res["texto"]);
}, (error) => {
console.error("There was an error!", error);
});
}
1 curtida
Já tinha tentando
Mas ele imprime só isto: There was an error! OK , no console.
Já cai na função de erro difreto ou chega a cair na de sucesso em algum momento? (coloca um console log no callback de sucesso para ver)
1 curtida
O service está assim
novoContato(modelo: ContatoModel) {
this.http
.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.subscribe({
next: (httpReturn: any) => {
console.error("ok!", httpReturn);
this.toastrService.success(httpReturn["texto"]);
},
error: (error: any) => {
console.error("There was an error!", error);
},
});
}
gbuenoo
Fevereiro 2, 2022, 3:07pm
#16
Bom dia, tente dessa forma:
this.publicoService
.novoContato({
fisica: this.fisica,
juridica: this.juridica,
evento: this.evento,
})
.subscribe(
(res) => console.log("HTTP response", res),
(err) => console.log("HTTP Error", err.error.texto),
() => console.log("HTTP request completed.")
);
1 curtida
@gbuenoo
Não funciona assim
Do seu jeito ele imprime
Assim:
novoContato(modelo: ContatoModel) {
return this.http
.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.subscribe(
(res) => console.log("HTTP response", res),
(err) => console.log("HTTP Error", err.error),
() => console.log("HTTP request completed.")
);
}
Ele mostra assim
Assim
novoContato(modelo: ContatoModel) {
return this.http
.post(`${environment.SIT}${this.servico}novo-contato/`, modelo)
.subscribe(
(res) => console.log("HTTP response", res),
(err) => console.log("HTTP Error", err),
() => console.log("HTTP request completed.")
);
}
Mostra assim
A questão, está na impressão do erro, pelo que estou vendo.
Qualquer erro 4** que retorno, ele não mostra o erro
Não passou na validação do backend.
1 curtida
Sim. Ele retornou para o front este erro, e deveria mostrar. correto ?
Só que só estou conseguindo pegar OK
Entende ?
Não estou conseguindo imprimir este erro