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 здесь не вариант
  • Вопрос задан
  • 242 просмотра
Решения вопроса 2
risentveber
@risentveber
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);
Ответ написан
Ваш ответ на вопрос

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

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