Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等到函数完成后再运行另一个函数_Javascript_Jquery_Each_Jquery Deferred_Deferred - Fatal编程技术网

Javascript 等到函数完成后再运行另一个函数

Javascript 等到函数完成后再运行另一个函数,javascript,jquery,each,jquery-deferred,deferred,Javascript,Jquery,Each,Jquery Deferred,Deferred,我遇到了一个让我疯狂了10天的问题。。。基本上,我有一个启动的函数(handleText),我想在运行第二个函数(handleBackground)之前等待该函数的结束 我尝试过延迟和承诺,但我认为我不太理解它们,因为我无法让它按我想要的方式工作 function handleText(){ //BLAST INIT var blastedwords = $('.baselineHeader').blast({ delimiter: 'word',

我遇到了一个让我疯狂了10天的问题。。。基本上,我有一个启动的函数(handleText),我想在运行第二个函数(handleBackground)之前等待该函数的结束

我尝试过延迟和承诺,但我认为我不太理解它们,因为我无法让它按我想要的方式工作

function handleText(){
    //BLAST INIT    
    var blastedwords = $('.baselineHeader').blast({
        delimiter: 'word',
    });

    //SHUFFLE ORDER IN ARRAY
    blastedwords = shuffleAds( blastedwords);
    function shuffleAds(arr){
        for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
        return arr;
    }

    //ADD CLASS TO SPAN CREATED WITH BLAST WITH A RANDOM DELAY
    blastedwords.each(function(index) {
        var min = 45, max = 100;
        var delay = Math.floor(Math.random() * (max - min) + min);
        var that = $(this);
        var t = setTimeout(function() {
            $(that).addClass("test");
        }, delay * index);
    });
}

function handleBackground(){
    $('.baselineHeader').addClass('processed');
}

handleText();
handleBackground();
现在,
handleText
启动和
handleBackground
(我想在第一个函数完成后运行的第二个函数)同时启动,而不是等待
handleText
完成

我想运行
handleText
并等待each循环在运行
handleBackground
之前为使用blast.js创建的每个span赋予类

有人能帮我吗?
祝大家有一个美好的一天:)

在函数之外定义延迟,每次迭代都会增加延迟,以便下一次迭代是上一次迭代之后的随机时间

var delay = 0;

blastedwords.each(function(index) {
    var min = 45, max = 100;
    delay += Math.floor(Math.random() * (max - min) + min);
    var that = $(this);
    var t = setTimeout(function() {
        $(that).addClass("test");
    }, delay * index);
});

我建议设置一个全局变量totalTime,您可以使用该变量将个别延迟相加。这样,在totalTime过去后,您可以使用另一个setTimeout调用函数handleBackground()

var totalTime = 0;
blastedwords.each(function(index) {
  var min = 45,
    max = 100;
  var delay = Math.floor(Math.random() * (max - min) + min) * index;
  totalTime += delay;
  var that = $(this);
  var t = setTimeout(function() {
    $(that).addClass("test");
  }, delay);
});
setTimeout(handleBackground, totalTime);

setTimeout()
回调中调用
handleBackground()
。多么天才的主意!为什么我从来没有想过。。。它像一个魅力,谢谢:)呵呵,谢谢kkqe的客气话-很高兴我能帮上忙!