Por que catch retorna um objeto e não um objeto de erro?
É assim que é feito com $ http do Angular, no qual esta biblioteca é baseada. Mais ou menos é um artefato e não necessariamente a maneira certa de fazer as coisas. Eu gostaria de mover para um caminho de erro mais consistente, onde um Error
é usado com detalhes de resposta anexados, se relevante.
function createError(message, details) {
var err = new Error(message);
Object.keys(details, function (key) {
err[key] = details[key];
});
return err;
}
createError('timeout of ' + config.timeout + 'ms exceeded', {
code: 'ECONNABORTED',
config: config
});
Também gostaria de alterar a lib para rejeitar apenas Promise
quando ocorrer um erro real, independentemente do código de status HTTP. Considerando que agora qualquer coisa fora da faixa de 200-300 é rejeitada.
@mzabriskie
Você também pode considerar o uso de um sinalizador de configuração para determinar qual ação tomar quando uma resposta não 2xx / 3xx for retornada.
O request-promise
lib usa a bandeira / opção simple
para isso. Quando simple
é true
, a solicitação-promessa rejeita em erros fora da rede (2xx, 3xx). Quando o sinalizador é falso, ele não rejeita nada e passa a ser de responsabilidade do usuário. Achei isso muito útil e tenho aplicativos que usam as duas configurações. Eu acho que normalmente tenho definido o simples como true
, pois geralmente é um IMO padrão melhor.
https://github.com/request/request-promise#get -a-rejeição-somente-se-a-solicitação-falhou-por-motivos-técnicos
Fechando como duplicata de # 24
Comentários muito úteis
É assim que é feito com $ http do Angular, no qual esta biblioteca é baseada. Mais ou menos é um artefato e não necessariamente a maneira certa de fazer as coisas. Eu gostaria de mover para um caminho de erro mais consistente, onde um
Error
é usado com detalhes de resposta anexados, se relevante.Também gostaria de alterar a lib para rejeitar apenas
Promise
quando ocorrer um erro real, independentemente do código de status HTTP. Considerando que agora qualquer coisa fora da faixa de 200-300 é rejeitada.