Я столкнулся с проблемой, которая сводит меня с ума уже дней 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 start и handleBackground (моя вторая функция, которую я хочу запустить после завершения первой) срабатывают одновременно и не ждут завершения handleText.
Я хочу, чтобы handleText запускался и ждал, пока каждый цикл передаст класс каждому промежутку, созданному с помощью blast.js, прежде чем запускать handleBackground.
Может кто-то помочь мне с этим ? Всем хорошего дня :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Определите задержку вне вашей функции, и каждая итерация увеличивает задержку, чтобы следующая была случайным временем после последней.
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);
});
Я бы рекомендовал настроить глобальную переменную общее время, которую вы можете использовать для суммирования индивидуальных задержек. Таким образом, вы можете использовать другой setTimeout для вызова функции handleBackground() после прохождения totalTime.
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);
Какая гениальная идея! Почему я никогда не думал об этом... Это сработало как шарм, спасибо :)
Хе-хе, спасибо за добрые слова kkqe - рад, что смог помочь!
Позвоните
handleBackground()в обратном вызовеsetTimeout().