Search code examples
javascriptecmascript-6settimeoutsetintervales6-promise

I can't change global variable inside setInterval es6


I have to find a button when it will appear. In order to do that I use setInterval. When it finds this button, it gives to my variable needed value. I check it inside the setTimeout, but after setTimeout(outside these method) my global variable became as before setTimeout. How to fix that?

let foundValue;
function findById(id) {
  let interval = setInterval(() => {
    if (document.getElementById(id)){
      let foundValue = document.getElementById(id);
      clearInterval(interval);
    }
  }, 1000);
  return foundValue;
}

Solution

  • It's because you're re-declaring foundValue inside setInterval so you should remove the second let, for example:

    let foundValue;
    function findById(id) {
      let interval = setInterval(() => {
        if (document.getElementById(id)){
          foundValue = document.getElementById(id);
          clearInterval(interval);
        }
      }, 1000);
      return foundValue;
    }