La console.error() (o console.log() ) tiene algunas características interesantes, como listas de argumentos de longitud variable que imprimen objetos (y matrices):
const spaghettio = {sauce: 'arrabiata', cheese: 'gorgonzola'} console.log(`Uh oh,`, spaghettio)El objeto se imprime de manera que puedo expandir las teclas, lo cual es muy útil para objetos grandes:
Pero si quiero arrojar un error real, no tengo esas opciones. Así que normalmente termino haciendo esto:
console.error(`Uh oh`, spaghettio) throw new Error(`Uh oh: ${spaghettio}`) La versión de Error generalmente hace un mal trabajo al formatear los objetos y las matrices: Uh oh: [object Object] . puedo hacer
throw new Error(`Uh oh: ${JSON.stringify(spaghettio)}`) Pero no importa cómo lo corte, no es tan bueno como lo que hace console.error .
¿Hay una mejor manera de evitar repetirme aquí mientras sigo imprimiendo objetos en la consola?
La combinación de console.error con throw new Error es probablemente la forma más corta de lograr lo que desea (tenga en cuenta que no podrá expandir el objeto en la consola de StackOverflow, se imprimirá completamente aquí):
const spaghettio = {sauce: 'arrabiata', cheese: 'gorgonzola'} throw new Error(console.error('Uh oh:', spaghettio))Puede crear sus propios errores y luego crear un manejo personalizado, que puede incluir, por ejemplo, objetos:
class MyError extends Error { constructor(message, obj) { super(message); this.obj = obj; } } async function x() { throw new MyError('ab', { that: 'is', much: { really: 'weird' } }); } x().catch(err => { if (err instanceof MyError) { console.error(err.message); console.error(err.obj); } })