Encontrado esta pregunta a través de una búsqueda de la misma cuestión. Aunque miré a mi alrededor y llegué a la conclusión de que no creo que err
sea cualquier cosa menos un Error o null
.
La mejor fuente de "autoridad" que he encontrado es el tema de ayuda de Nodejitsu:
http://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions
En Node.js, se considera una práctica estándar para controlar los errores en las funciones asíncronas devolviéndolos como el primer argumento para la devolución de llamada de la función actual. Si hay un error, al primer parámetro se le pasa un objeto Error con todos los detalles. De lo contrario, el primer parámetro es nulo.
Pero creo que se puede argumentar intuitivamente por qué debería ser así.Aunque hay una gran cantidad de pruebas en if (err)
código para decidir si algo es o no un error, no debe pasar 0
o false
o undefined
o NaN
o una cadena vacía. Debería poder probar con if (err == null)
si lo desea.
Pasando volver algo en el campo err es no nulo, pero no coincide con if (err instanceof Error)
parece poco fiable. Así que sugeriría no usar matrices u objetos. Si lo hizo, tenga en cuenta también que ninguno de los errores en su matriz identificará la ubicación donde se creó el error agregado. Ese es el punto donde ocurrió el "error real", porque fue el momento de la decisión que los errores que se le dieron no eran algo que pudiera manejar.
Sin embargo, esto significa que había necesidad de un poco más de trabajo para conseguir que:
function MultipleError (errs) {
// http://stackoverflow.com/a/13294728/211160
if (!(this instanceof MultipleError)) {
return new MultipleError(errs);
}
Error.call(this);
this.errs = errs;
// captureStackTrace is V8-only (so Node, Chrome)
// https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
Error.captureStackTrace(this, MultipleError);
};
MultipleError.prototype.__proto__ = Error.prototype;
MultipleError.prototype.name = 'MultipleError';
MultipleError.prototype.toString = function() {
return 'MultipleError: [\n\t' + this.errs.join(',\n\t') + '\n]';
}
Un poco exagerado, tal vez. Pero si realmente no puede escoger un error para representar la agregación, y pensar que alguien podría estar interesado en el conjunto de errores en vez de uno, parecería (?) Eso es lo que se quiere hacer ... permite la llamante para examinar la matriz errs
si así lo desean.
+1 para notar que el error debería ser efectivamente un 'Error' – laconbass
Te estoy bajando por el *" Creo que no hay nada de malo en devolver una serie de errores "*, pero otorgándote una recompensa de 100 puntos * (como nadie más respondió cuando lo estimulé para llamar más la atención, así que no tengo a nadie más para darle los puntos) *. Tal vez la ganancia neta de 98 puntos será un pequeño incentivo para revisar y volver a reflexionar sobre el tema: -P ... porque yo creo que el canon es que una serie de errores no es un parámetro válido err en el Nodo. – HostileFork
desafío @HostileFork aceptado :) Se corrigió la respuesta. – Raynos