Por ejemplo, tengo una función asíncrona:
prepAttrsRef.current.addEventListener('documentstatechanged', async (evt: CustomEvent<FlowDocumentState>) => { if (evt.detail.draftState === 'unpublished-changes') { dispatch(updateIsFlowpublished(false)); await publishPrepFlow(); } if (evt.detail.draftState === 'all-changes-published') { await cleanSteps[0].selectAsync(); } } await getAndDispatchPrepColumns(); }); ¿Debería encerrar siempre las líneas de await con try/catch o al menos un catch para manejar el caso potencial de que la promesa podría ser rechazada? (Aunque no se si la promesa será rechazada o no, ya que estoy llamando a la API creada por otros)
Siempre es una buena práctica manejar las excepciones en el punto de origen para evitar horas de depuración para descubrir por qué el código se está rompiendo. Ahora, habiendo dicho eso, creo que debe decidir en qué nivel necesita manejar las excepciones.
En producción, no tiene idea de qué entradas/parámetros puede obtener si están expuestos al usuario final. Puede haber un caso en el que la entrada sea un valor que no pueda ser manejado por la API subyacente, lo que hará que su servicio falle.
Por ejemplo,
Si envuelve todo el bloque de código, es decir, dos declaraciones de await en un bloque try-catch , no sabrá qué await falló a menos que tenga excepciones personalizadas generadas por la función esperada.
para un código limpio, sí, debe hacer eso, se supone que su función debe hacer una cosa y si falla, debe dejar que ladre (dónde está el problema), eso lo ayudará en la depuración.
si tiene muchos intentos/capturas en el mismo bloque, su función hace muchas cosas y eso no es una buena práctica.
Es un buen ejemplo
try{ await publishPrepFlow(); }catch(error){ // throw it to handle it on a different level throw Error('unable to publishPrepflow') // no any action | write on log file at least ... console.log('unable to publishPrepflow') }para manejar todas las excepciones no detectadas y las promesas rechazadas
process .on('unhandledRejection', (reason, p) => { console.error(reason, 'Unhandled Rejection at Promise', p); }) .on('uncaughtException', err => { console.error(err, 'Uncaught Exception thrown '+ err.message); });