Cuál es la diferencia entre:
try { const result = await hello(); } catch (error) { throw error; }y
try { const result = await hello(); } catch (error) { throw Error(error); }También
¿Es necesario el segundo? Parece que solo está envolviendo un error con un objeto de error. ¿Cuál es el preferido? Por favor, ayúdame a entender.
Es posible que el valor con el que rechazó la Promesa no fuera un objeto de error, sino algo más:
(async() => { try { const result = await Promise.reject(5); } catch (error) { console.log(error); console.log(typeof error); } })();Haciendo
throw Error(error); se asegura de que el valor arrojado sea definitivamente un objeto de error, lo que podría ser importante si el valor arrojado se examina más adelante y se espera que sea un objeto de este tipo. No querrías, por ejemplo, que se arroje undefined o null (extraño, lo sé, pero no imposible) y acceder a una propiedad de eso para luego lanzar en el punto donde estás capturando de verdad.
const hello = () => new Promise((resolve, reject) => { reject(); }); (async() => { try { const result = await hello(); } catch (error) { throw error; } })() .catch((error) => { console.log('The error message was:'); console.log(error.message); });