Lizard-108
@Lizard-108
Ящерица

Как оптимизировать этот код?

var intervalTimer;
    intervalTimer = setTimeout((function() {
      return setTimeout((function() {
        console.log(1);
        return setTimeout((function() {
          console.log(2);
          return setTimeout((function() {
            return console.log(3);
          }), 1000);
        }), 1000);
      }), 1000);
    }), 1000);


Суть в том что после каждой альтерации должна выполнятся определенная программа, консоль логи я вывел просто для примера.
Запихнуть это все в setInterval здесь не вариант
  • Вопрос задан
  • 241 просмотр
Решения вопроса 2
RISENT
@RISENT
fullstack web developer
Чтобы избежать callback hell используйте promise и setTimeout. В таком случае код превращается в линейный:

new Promise(function(resolve){
  setTimeout(function() {
    console.log(1);
    resolve();
  }, 1000);
}).then(function() {
  let nextPromise = new Promise(function(resolve){
    setTimeout(function() {
      console.log(2);
      resolve();
    }, 1000);
  });
  return nextPromise;
}).then(function() {
  let nextPromise = new Promise(function(resolve){
    setTimeout(function() {
      console.log(3);
      resolve();
    }, 1000);
  });
  return nextPromise;
}).then(function() {
   setTimeout(function() {
      console.log(4);
   }, 1000);
});
Ответ написан
@KFan
Веб-программист
var Steps = {
	0: function () {
		console.log(1);
	},
	1: function () {
		console.log(2);
	}
};

var counter = 0;
var intervalTimer = setInterval(function () {
	if (!Steps[counter]) {
		clearInterval(intervalTimer);
		return;
	}

	Steps[counter]();
	counter++;
}, 1000);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kirill89
@kirill89
Вы уверены, что setInterval вам не подойдет?

var state = 0;
var intervalTimer = setInterval(function () {
  switch(state){
    case 0:
      console.log(1);
      break;
    case 1:
      console.log(2);
      break;
    case 2:
      console.log(3);
      break;
    default:
      clearInterval(intervalTimer);
  }
  state++;
}, 1000);
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Admon Новосибирск
от 50 000 до 70 000 руб.
Энергомера Ставрополь
от 28 000 до 30 000 руб.
18 дек. 2018, в 20:42
5000 руб./за проект
18 дек. 2018, в 20:34
5000 руб./за проект
18 дек. 2018, в 20:01
10000 руб./за проект