Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

js setInterval is working but setTimeout isn't

I'm learning about setTimeout vs setInterval and I have got setInterval to work but not setTimeout. for example this doesnt work:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Brewery</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script type="text/javascript"> 
        function doNothing()
        {
            var t = "hello wolrd";
        }

        function poll(){
        $.ajax({
            //url: "http://192.168.0.11/"+Math.random(),
            url:"line-ajax.htm",
            contentType:"text/html",
            success: 'doNothing()'
        });
        }

        setTimeout(poll(),2000);
        </script>
        <link rel="stylesheet" type="text/css" href="http://www.highcharts.com/highslide/highslide.css" />
    </head>
    <body>
        <div id="container" style="width: 1200px; height: 500px; margin: 0 auto"></div>             
    </body>
</html>

but if i change only this

setTimeout(poll(),2000);

to

setInterval(poll(),2000);

it will make an ajax request every 2 seconds...

what is going on?

---edit i have also tried setTimeout(poll,2000); but that doesn't make the ajax request every 2 sec either.

like image 795
cobolstinks Avatar asked Nov 27 '25 19:11

cobolstinks


2 Answers

Remove the () inside the setTimeout or setInterval. Treat the function name as a variable, and that's what you're passing.

like image 58
Niet the Dark Absol Avatar answered Nov 29 '25 08:11

Niet the Dark Absol


"I'm trying to get setTimeout to call the 'poll' function every 2 seconds, it is not"

The .setTimeout() method calls the function you pass it exactly once, after the specified delay.

The .setInterval() method calls the function you pass it repeatedly, with the specified delay between each call.

From the update to your question you seem to think they both do the same thing. Please read the doco I've linked to.

Note that you have to pass a function reference (or a string to be eval'd), so say:

setInterval(poll, 2000);
// NOT
setInterval(poll(), 2000);

The latter should not work because it calls poll() immediately and passes its return value (undefined) to setInterval(), so I really can't understand why it worked for you.

like image 31
nnnnnn Avatar answered Nov 29 '25 09:11

nnnnnn



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!