JavaScript setInterval immediately run

拟墨画扇 提交于 2019-12-20 04:57:16

问题


I found a solution to run interval in javascript immidiately, not waiting for a first "timeout"

setInterval(function hello() {
  console.log('world');
  return hello;
}(), 2500);

But problem is this solution isn't working is construction like this

(function () {
    window.Banner = {

        doMagic: function () {
            setInterval(function magic() {
                console.log('magic');
                return magic;
            }, 2500);
        }
    }
})();

Banner.doMagic();

I've tried to return Banner method, to name it and return and no success. Point is what in real construction is much more complex, so i can't just rewrite it to "return setTimeout" solution, as offered widely, so it would be really perfect to find what am i doing wrong with this one.

http://jsfiddle.net/5jawxLnr/3/


回答1:


Perhaps the most proper way to do it would be to take the whole callback outside of the setInterval call and put it in a separate variable:

(function () {
    window.Banner = {

        doMagic: function () {
            var magic = function() {
                console.log('magic');
            };
            setInterval(magic, 2500);
            magic();
        }
    }
})();

Banner.doMagic();

The effect is the same as your first code, but this way your code is a little cleaner.




回答2:


Your no longer self-executing the function in your 2nd code snippet. You need to change this to the following:

doMagic: function () {
   setInterval(function magic() {
      console.log('magic');
      return magic;
   }(), 2500);
}

I agree with others though, this isn't the cleanest way to do this and isn't very obvious to the next developer who comes along. I recommend storing the function in a variable, executing it immediately and then running it in the setInterval also:

doMagic: function () {
   var magic = function magic() {
      console.log('magic');
      return magic;
   }
   magic();
   setInterval(magic, 2500);
}



回答3:


In your code there is no way to perform the required task, instead follow the below approach:

// Use function to perform the task.
function doTask () {
	console.log("...");
}
// Perform task for the first time.
doTask();
// On interval do task.
setInterval(doTask, 2500);



回答4:


If you add the parenthesis to the below code part it does

    doMagic: function () {
        setInterval(function magic() {
            console.log('magic');
            return magic;
        }(), 2500);                   // added them here
    }



回答5:


Try this example

var hello = function() {
  document.write('hello... ');
};
setInterval(hello, 1000);
hello();


来源:https://stackoverflow.com/questions/32737677/javascript-setinterval-immediately-run

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!