Establecer el intervalo dentro del bloque try pero borrarlo si ocurre una excepción en el bloque catch.
Tengo un código que llama a un setInterval en el bloque try y limpio el intervalo al final del código, pero si mi código captura una excepción, la función setInterval sigue ejecutándose indefinidamente. ¿Cómo puedo limpiar esto si el sqsInterval que creé en el bloque try no existe en el catch?
const createInterval = (message, queueUrl) => {
let timeout = parseInt(process.env.QUEUE_VISIBILITY_TIMEOUT, 10);
const interval = setInterval(() => {
timeout += parseInt(process.env.VISIBILITY_TIMEOUT_INCREMENT, 10);
if (timeout > 43200) {
return;
}
const params = {
QueueUrl: queueUrl,
ReceiptHandle: message.ReceiptHandle,
VisibilityTimeout: timeout,
};
sqs.changeMessageVisibility(params, (err, data) => {
if (err) logger.error(err, err.stack);
else logger.info(JSON.stringify(data));
});
}, parseInt(process.env.TIMER_INTERVAL, 10));
return interval;
};
try {
// Starting time for complete clip project
const queueUrl = process.env.AWS_SQS_VIDEO_CLIPS_QUEUE_URL;
const sqsInterval = createInterval(message, queueUrl);
await sleep(30000);
clearInterval(sqsInterval);
logger.info(`Finished processing message - [MessageID: ${message.MessageId}], [ReceiptHandle: ${message.ReceiptHandle}] [MD5OfBody]: ${message.MD5OfBody} [noteId=${noteId}]`);
} catch (error) {
clearInterval(sqsInterval);
davy.ai
Para limpiar la función setInterval en el bloque catch, es necesario declarar la variable
sqsInterval
fuera del bloque try y luego asignarle el intervalo creado dentro del bloque try. De esta manera, si se produce una excepción en el bloque try y el intervalo nunca se crea,sqsInterval
será undefined y tratar de eliminarlo en el bloque catch no lanzará un error.Aquí tienes un ejemplo: