外部函数的 clearInterval 不起作用 - Node.JS

clearInterval of a external function not working - Node.JS

我有一个 setInterval 函数已在另一个函数中调用,我需要在处理完成后停止它。我尝试将此 setInterval 函数设置为变量并调用 clearInterval,但间隔保持 运行

 const createInterval = (visibilityTimeout, startDateTime, message) => {
  setInterval(() => {
    const currentDateTime = moment().valueOf();
    const timeDifference = (visibilityTimeout * 1000) - (currentDateTime - startDateTime);
    if (timeDifference >= 600000) {
      return;
    }
    if (timeDifference < 494983) {
      const params = {
        QueueUrl: 'http://localhost:4566/000000000000/test-queue2',
        ReceiptHandle: message.ReceiptHandle,
        VisibilityTimeout: visibilityTimeout,
      };
      sqs.changeMessageVisibility(params, (err, data) => {
        if (err) logger.error(err, err.stack);
        else logger.info(data);
      });
      // eslint-disable-next-line no-param-reassign
      visibilityTimeout += 300;
    }
  }, 5000);
};

module.exports = async (message) => {
  const startDateTime = moment().valueOf();
  const {
    noteId,
  } = JSON.parse(message.Body);

  logger.info(`Processing message [noteId=${noteId}]`);
  try {
    const note = await TestSessionNote.findById(noteId);
    const testSession = await TestSession.findById(note.test_session_id);
    logger.info(`Downloading video [key=${testSession.video_key}]`);

    const isProcessing = true;
    const interval = createInterval(500, startDateTime, message, isProcessing);
    await sleep(20000);
    clearInterval(interval);
    logger.info(`Finished processing message [noteId=${noteId}]`);
  } catch (ex) {
    await TestSessionNote.update(noteId, { status: 'transcribe_error' });
    logger.error(`Error processing message [noteId=${noteId}]`, ex);
  }
};

我知道如果我创建一个 var test = setInterval(() => {console.log('blabla')}, 500) 并调用 clearInterval(test) 它会起作用,但我不知道我不知道如何通过调用函数来做到这一点

我认为你必须 return 从 createInterval 函数 intervalId 然后它应该工作。

你能检查一下你当前的 intervalId 值是多少吗?

https://developer.mozilla.org/en-US/docs/Web/API/setInterval

“returned intervalID 是一个数字非零值,用于标识调用 setInterval() 创建的计时器;可以将此值传递给 clearInterval() 以取消间隔。”