1

好的,我试图在一个子函数中设置一个 setInterval,但它没有在那里实现......我的警报没有因为这个而触发:

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();
    }
}
4

3 回答 3

4

process_chunk当您将其传递给 setInterval 时,尚未为其分配值。移动线:

var interval = setInterval(process_chunk, 1000);

就在之前(以及在匿名函数分配给之后process_chunk):

doneVar += 1;

或者,如果您正在寻找提升函数,则使用函数声明而不是表达式:

function process_chunk() {

两个版本都可以解决您的问题。

于 2013-08-29T17:47:35.537 回答
1

您需要在使用之前声明该函数。

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

var interval = setInterval(process_chunk, 1000);

于 2013-08-29T17:48:12.067 回答
1

如果您只使用区间中的函数,请使用此(我的首选方法,您的方法没有错)

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);

应该这样做,这样做并在区间内定义函数可以防止许多问题,例如在这种情况下,您需要在将函数设置为区间之前定义函数。这是保持您风格的另一个版本。

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);

我想我刚才注意到的另一件事,你使用process_chuck而不是var process_chuck女巫也会引起问题。在第二个答案中固定,不适用于第一个。

于 2013-08-29T17:52:32.670 回答