pandaa
@pandaa

Как выполнить одну функцию после завершения другой?

var arr = ['element_0', 'element_1', 'element_2', 'element_3', 'element_4'];

      for (var i = 0; i < arr.length; i++) {
        first();
        function first() {
          console.log('start ');
          setTimeout(function () {
            console.log('main code... ' + arr[i]);
          }, 2000);
          second();
        }
        function second() {
          console.log('end '+arr[i]);
        }
      }
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Вот вам вариант с промисами:
function first(){
	return new Promise(next=>{
		setTimeout( function(){
			console.log(1);
			next('привет');
		}, 1000 );
	});
}
function second(txt){
	console.log('После first получили:', txt);
	console.log(2);
}

first().then(second); //Сначала first, затем second

Теорию по промисам можно почитать здесь: https://learn.javascript.ru/promise

Соответственно, ваш вариант с промисами будет примерно такой:
spoiler
function first(e){
	console.log('start',e);
	return new Promise(next=>{
		console.log('promise');
		setTimeout( function(){
			console.log('main code... ' + Math.random());
			next(e);
		}, 2000 );
	});
}
function second(e){
	console.log('end '+e);
}

var arr = ['element_0', 'element_1', 'element_2', 'element_3', 'element_4'];

arr.forEach(e=>first(e).then(second));
Обратите внимание, что вся суть и работа в итоге записывается в одну строчку в конце. И получается очень красиво и логично. А весь код до этого - чисто подготовка и объявления.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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