Cybercampbell
Cybercampbell

Reputation: 2606

how to do a jQuery timeout

using jQuery... how do I run a function and then run a second function every 2 minutes after.

eg:

function 1: runs once

function 2: runs every 2 minutes after function 1 has finished

Any help will be much appreciated.

C

Upvotes: 0

Views: 845

Answers (5)

Kostas Maragos
Kostas Maragos

Reputation: 569

I would rather use setTimeout(). It is supposed to be less demanding on the browser, more processor efficient.

Here's what your functions should look like:

function f2(){
    t = setTimeout(f2, 2000 * 60);
    // code for f2
}

function f1(){
    // code for f1
    setTimeout(f2, 2000 * 60);
}

Then wherever it is you want the whole thing to start, call the first function:

var t;
f1();

You can stop the loop anytime:

clearTimeout(t);

Be sure to trigger setTimeout at the beginning of f2, so that it fires exactly every 2 minutes. Any code before 'setTimeout', taking 'x' time to process would result in the next f2 call firing after 2min+x.

Upvotes: 0

eversor
eversor

Reputation: 3073

Remember, you are using JQuery because it makes javascript more simple. JQuery is a javascript library, not a language, wich means you can perfectly use javascript functions on it.

For your problem, you only need to call, with the setTimeout, your second function, and put inside this function another setTimeout(ms);

Like this:

function f1(/*...*/){}
var t = setTimeout("f2()",2 * 60 * 1000);

And at the end of your f2() function you should include another setTimeout, in order to call that function every 2 minutes.

function f2(/*...*/){
    //...
    t = setTimeout("f2()",2 * 60 * 1000);
}

To cancel this callings to f2() is just as simple: clearTimeout(t);

Upvotes: 0

bricker
bricker

Reputation: 8941

jQuery's delay() function is not a replacement for javascript's setInterval or setTimeout. To run a function #1 once on page load and then function #2 every 2 minutes after:

function funcOne() { 
  // some javascript
  setInterval('funcTwo()', 1000*60*2);
};

function funcTwo() { 
  // some other javascript
};

$(document).ready(function() {
  funcOne();
});

Upvotes: 1

spicavigo
spicavigo

Reputation: 4224

function f2(){}
function f1(){
    ... some code ...
    setInterval(f2, 2000*60);
}
//From somewhere in your code, call f1
f1();

setInterval also returns a handle which can be used to cancel further calling of that function.

Upvotes: 2

Marwan
Marwan

Reputation: 2402

Heloo if i get you right then this is a solution

function func1()
{}

function func2()
{}

window.onload = function()
{
func1();

var flag_first_call_is_after_2=0;
var interv = setInterval(
function()
{
if(flag_first_call_is_after_2==0)
{
flag_first_call_is_after_2=1;
}
else
{
func2();
}
}
,120000
);
}

Upvotes: -2

Related Questions