Boa tarde Victor! O catch continua sendo usado por quem chamou a API! Mas há um detalhe.
Se a sua API Fetch receber um 404, 500 ou qualquer outro código de erro ela não lançará um erro automaticamente não cairá no catch. É por isso que uma das primeiras coisas que você precisa fazer é testar res.ok
para saber se houve algum problema. Esse res.ok
é um atalho que evita uma série de if's para a faixa de status HTTP de erros. Se res.ok
for falso, significa que houve algum problema na requisição e você precisa lançar um erro para que a instrução catch
seja processada.
É a mesma questão quando trabalharmos com XHMLHttpRequest...
Na explicação textual eu digo:
No entanto, faltou tratar os casos de erro na nossa Fetch API. Como o código identificava se tínhamos um erro? Testávamos com o readyState se a requisição estava completa e verificávamos se o estado era 200 ou com um valor próximo. Neste caso, nós usaremos o res.ok para fazermos testes com o status e nos indicará se é falso ou verdadeiro. Vamos ver como tratar o erro.
Por isso a necessidade do handler:
_handleErrors(res) {
if(!res.ok) throw new Error(res.statusText);
return res;
}
O Design da API fetch é assim porque nem sempre você quer tratar um erro vindo de um servidor como um erro, pode querer se recuperar por vias normais (dentro do then) e não dentro do catch.