Tengo docenas de funciones con el bloque try catch para manejar y registrar cualquier error que ocurra.
function add(a, b) { try { return a + b; } catch (error) { log.error(error.message + ' in add'); } } Como estas instrucciones try catch tienen el mismo tipo de código para cada función que menciona el mensaje de error y el nombre de la función en cada registro, quiero alguna forma de evitar escribir try catch para cada función y quiero que se agregue automáticamente. Mi function debería ser como la de abajo, pero debería funcionar como la de arriba.
function add(a, b) { return a + b; }Como podría ser posible?
Puede envolver sus funciones usando clausuras .
Para iniciar sesión, puede intentar usar Function.name , pero para obtener información significativa, esto descarta las funciones de flecha y, de lo contrario, las funciones anónimas. Esto podría resolverse pasando explícitamente una cadena de nombre a la función de wrap , pero...
Por supuesto, no hay garantía de que la función devuelta se use a través de un identificador relacionado con el nombre original (cualquiera que whatever frente anError continuación).
const wrap = func => (...args) => { try { return func.apply(this, args); } catch (e) { console.error(`${e} in ${func.name}`); } }; const add = wrap((a, b) => a + b); const fail = wrap(t => { if (t) throw new Error('foo'); }); const whatever = wrap(function anError () { throw 'an error'; }); console.log(add(1, 2)); fail(false); fail(true); whatever();Salida combinada:
3 Error: foo in an error in anError¿Puedes intentar con la devolución de llamada...?
function add(a, b){ return a + b; } function substract(a, b){ return a - b; } function calc(a){ try{ const f = Array.prototype.shift.apply(arguments); return f(...arguments); }catch(e){ console.log(e.stack); } } calc(substract, 1, 2);