当前位置: 首页 > 知识库问答 >
问题:

在try块中设置间隔,但在捕获异常时清除

袁康裕
2023-03-14

我有一个在try块中调用setInterval的代码,我清除了代码末尾的间隔,但是如果我的代码捕获和异常,setInterval函数将永远运行。如果我在try块中创建的sqsInterval在捕获中不存在,我如何清除此?

    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);

共有1个答案

申光临
2023-03-14

const sqsInterval的作用域在try{}中。用let

let sqsInterval;
try {
  const queueUrl = process.env.AWS_SQS_VIDEO_CLIPS_QUEUE_URL;
  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);
}
 类似资料:
  • EDIT应该返回true或false,但它的抛出错误

  • 问题内容: 有人告诉我,在Java中,可以在try块中捕获未检查的异常,但是如果捕获了它,就不称为已检查的异常吗? 问题答案: 未检查的异常是不需要在- 块中捕获的异常。未检查的异常是或类的子类。 已检查的异常是需要在- 块中捕获的异常。 可在Java语言规范的11.2节:编译时检查异常中找到检查和未检查异常的定义: 未检查的异常类是类及其子类,以及类及其子类。所有其他异常类都是检查的异常类。 仅

  • 问题内容: 我知道我可以做到: 我也可以这样做: 但是,如果我想在两个不同的异常中做同样的事情,那么我现在想到的最好的方法就是: 有什么办法可以做这样的事情(因为在两个异常中都采取的措施是): 现在,这确实不起作用,因为它与以下语法匹配: 因此,我捕捉两个截然不同的异常的努力并未完全实现。 有没有办法做到这一点? 问题答案: 例如,子句可以将多个异常命名为带括号的元组。 或者,仅对于Python

  • 问题内容: 一旦在此代码中捕获到异常,该方法就会运行,但是一旦我输入一个数字,程序就会关闭,并显示“生成成功”消息。一旦发生异常,是否有任何方法可以返回while循环? 问题答案: 将 try / catch 放入 while循环中 :

  • 每当我的VNC连接被终止时(每当我重新启动VM时),我都试图捕捉一个异常,并且我试图忽略它以继续我的Jython脚本。我不知道如何编写try catch语句来捕获异常,因为它起源于Java。这是一个sikuliX脚本。

  • 我正在尝试开发一个滑块,如果用户没有点击后退或前进按钮,它每5秒就会改变一次。 但是如果他(用户)这样做了,间隔会触发多次。。。为什么? 我将间隔保存在一个变量中,并清除该变量,因此我不知道为什么这不起作用。。。但是看看你自己: }); 感谢阅读;-)