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);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Stream Labs Москва
До 150 000 ₽
Myagi Минск
от 3 000 до 4 000 $
Salesbeat Москва
от 150 000 до 250 000 ₽
17 февр. 2020, в 00:30
1500 руб./за проект
16 февр. 2020, в 22:28
2000 руб./за проект