繁体   English   中英

Javascript setInterval没有使其起作用

[英]Javascript setInterval not making it into function

好的,我试图将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();
    }
}

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

var interval = setInterval(process_chunk, 1000);

在将匿名函数分配给process_chunk之前(之后):

doneVar += 1;

或者,如果您要提升函数,请使用函数声明而不是表达式:

function process_chunk() {

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

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

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

之前var interval = setInterval(process_chunk, 1000);

如果您仅在间隔内使用函数,请使用此方法(我的首选方法,您的方法没有错)

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 witch也可能导致问题。 已在第二个答案中修复,不适用于第一个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM