Doc Holiday
Doc Holiday

Reputation: 10254

Javascript setInterval not making it into function

Ok Im trying to do a setInterval into a sub function and its not making it in there...my alert is not firing off because of this:

var doneVar= 0;
var groupsVar= 4;
var interval = setInterval(process_chunk, 1000);
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;


process_chunk = function() {
    alert("we are after chunk");
    var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
    //alert("we are in function!!");
    $.each(arrayChunk,  function(key, item){
        $myTree.jstree("uncheck_node", "#"+item);
    });

    doneVar += 1;

    if (doneVar === groupsVar) {
        interval.clearInterval();
    }
}

Upvotes: 1

Views: 70

Answers (3)

Jordan Ramstad
Jordan Ramstad

Reputation: 179

If you are only using the function from the interval use this (my preferred method, your way is not wrong)

var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;

var interval = setInterval(function() {
    alert("we are after chunk");
    var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
    //alert("we are in function!!");
    $.each(arrayChunk,  function(key, item){
         $myTree.jstree("uncheck_node", "#"+item);
    });
    doneVar += 1;

    if (doneVar === groupsVar) {
         interval.clearInterval();
    }
},1000);

that should do it, doing it this way and defining the function within the interval prevents many problems, like in this case you need to defined the function before you set it in an interval. Here is another version keeping your style.

var doneVar= 0;
var groupsVar= 4;
var $myTree= $("#myTree");
var chunkLength = myArray.length / groupsVar;

var process_chunk = function() {
     alert("we are after chunk");
     var arrayChunk = myArray.slice(doneVar*chunkLength, (doneVar + 1)*chunkLength); 
     //alert("we are in function!!");
     $.each(arrayChunk,  function(key, item){
          $myTree.jstree("uncheck_node", "#"+item);
     });
     doneVar += 1;

     if (doneVar === groupsVar) {
          interval.clearInterval();
     }
}
var interval = setInterval(process_chunk, 1000);

I guess one other thing I noticed just now, you use process_chuck and not var process_chuck witch can cause problems too. Fixed in second answer, not applicable in first.

Upvotes: 1

RainingChain
RainingChain

Reputation: 7746

You need to declare the function before using it.

Put process_chunk = function() { ... });

Before var interval = setInterval(process_chunk, 1000);

Upvotes: 1

Paul
Paul

Reputation: 141839

process_chunk has not been assigned a value yet, when you pass it into setInterval. Move the line:

var interval = setInterval(process_chunk, 1000);

To right before (and right after the anonymous function is assigned to process_chunk):

doneVar += 1;

Or if you are looking for hoisting the function then use a function declaration rather than an expression:

function process_chunk() {

Both versions will solve your problem.

Upvotes: 4

Related Questions