等到函数完成 运行 另一个函数

Wait until function finish to run another function

我遇到了一个让我发疯大约 10 天的问题...基本上我有一个功能可以触发(handleText),我想在 handleText 之前等待该功能结束 运行再发一个(handleBackground)。

我试过 deferred 和 promises 但我觉得我不太理解它们,因为我无法让它按我想要的方式工作。

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 到 运行 并等待每个循环将 class 给 class 在 运行 宁 handleBackground.

有人可以帮我解决这个问题吗? 祝大家有美好的一天:)

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

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