¿Por qué catch devuelve un objeto y no un objeto de error?
Así es como se hace con $ http de Angular, en el que se basa esta biblioteca. Más o menos es un artefacto y no necesariamente la forma correcta de hacer las cosas. Me gustaría pasar a una ruta de error más consistente donde se usa un Error
que tiene detalles de respuesta adjuntos si es 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
});
También me gustaría cambiar la biblioteca para rechazar solo Promise
cuando ocurra un error real, independientemente del código de estado HTTP. Mientras que ahora se rechaza todo lo que esté fuera del rango 200-300.
@mzabriskie
También podría considerar el uso de un indicador de configuración para determinar qué acción tomar cuando se devuelve una respuesta que no sea 2xx / 3xx.
El request-promise
lib usa el indicador / opción simple
para esto. Cuando simple
es true
, la solicitud-promesa se rechaza por errores ajenos a la red (2xx, 3xx). Cuando la bandera es falsa, no rechaza nada y pasa a ser responsabilidad del usuario. He encontrado que esto es muy útil y tengo aplicaciones que usan ambas configuraciones. Creo que comúnmente tengo un conjunto simple en true
ya que generalmente es un IMO predeterminado mejor.
https://github.com/request/request-promise#get -a-rechazo-solo-si-la-solicitud-falló-por-razones-técnicas
Cerrando como duplicado de # 24
Comentario más útil
Así es como se hace con $ http de Angular, en el que se basa esta biblioteca. Más o menos es un artefacto y no necesariamente la forma correcta de hacer las cosas. Me gustaría pasar a una ruta de error más consistente donde se usa un
Error
que tiene detalles de respuesta adjuntos si es relevante.También me gustaría cambiar la biblioteca para rechazar solo
Promise
cuando ocurra un error real, independientemente del código de estado HTTP. Mientras que ahora se rechaza todo lo que esté fuera del rango 200-300.