Demigodd
@Demigodd

Как сделать вызов функций, по очереди?

https://jsfiddle.net/BloodStorm/03er2L10/1/

Вот допустим есть 2 функций number1() и number2() , как сделать так что бы при нажатий на Button сперва сыгралась функция number1 ( ) потом когда это функция закончиться, началось number2( ) ?
  • Вопрос задан
  • 1358 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Для очереди из асинхронных штук есть Promise («Промисы» = обещания).

Даже в jQuery, начиная с версии 1.8 можно возвращать из каждой анимации Promise и сложить цепочку A.then(B).then(C):
$("#button").click( animate );

function animate() {
	number1().then( number2).then( number3);
}

function number1() { // асинхронная, вернет промис
	return $('p').each( function(i) { $(this).delay((i++) * 500).fadeTo(2000, 1)} )
		  .promise();
}

function number2() { // асинхронная, вернет промис
  return $('p').hide("fast").promise();
}

function number3() { // выполнится мгновенно
	$('#result').html("Hello World");
}

Fiddle

Старый ответ. Функции jQuery, выполнение которых занимает время, обычно принимают ещё одним параметром функцию, которая выполнится по завершении анимации. Например для .hide() см. параметр complete

Поэтому можно так:
$("#button").click( number1 );

function number1() {
  var $p = $('p'), len = $p.length;
	$p.each(function(i) {
		$(this).delay((i++) * 500).fadeTo(2000, 1, function(){
			if(i===len) $( "p" ).hide( "fast", number2); // выполнить только для последнего из всех
		});
	})
}

function number2() {
	var number2func = document.getElementById('result');
	number2func.innerHTML = "Hello World";
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Samarkand
1. При нажатии на кнопку должна вызываться функция number3, которая вызывает функции number1 и number2 в требуемом порядке.
2. Написать обертку над jQuery, которая бы поддерживала задание приоритета для обработчиков.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы