Задать вопрос
@boluchevskii

Как вывести от 1 до 10 через секунду каждый раз, используя Promise?

Выводим от 1 до 10 через секунду каждый раз. Используя Promise. Ограничения - setTimeout и new Promise() мы можем вызывать только один раз для решения нашей задачи.
Мой код неверный, так как выводит все числа сразу после одной секунды. Подскажите, пожалуйста, лёгкое решение, чтобы мог разобраться.

let n = 1;

function exit(n) {
  return new Promise(function(resolve, reject) {
    let timer = setTimeout (() => resolve(n), 1000);
  });
}

let promise = exit(1);

promise.then(
  timer => console.log(n),
  error => alert(`Ошибка: ${error.message}`)
);

promise.then(
  timer => console.log(++n),
  error => alert(`Ошибка: ${error.message}`)
);

promise.then(
  timer => console.log(++n),
  error => alert(`Ошибка: ${error.message}`)
);
  • Вопрос задан
  • 318 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
@0x0f80
Проблема в том что вы создаете 1 промис и затем пытаетесь его использовать несколько раз, но этот обьект может быть выполнен или отключен только 1 раз. Можно воспользоваться рекурсией или асинхронной функцией
function exit(n) {
  return new Promise(function(resolve) {
    setTimeout(() => resolve(n), 1000);
  });
}

async function printNumbers() {
  for (let i = 1; i <= 10; i++) {
    let number = await exit(i);
    console.log(number);
  }
}

printNumbers();


Рекурсивно
let n = 1;

function exit(n) {
  return new Promise(function(resolve, reject) {
    setTimeout(() => resolve(n), 1000);
  });
}

function outputNumber(n) {
  if (n <= 10) {
    exit(n).then((num) => {
      console.log(num);
      outputNumber(num + 1);
    });
  }
}

outputNumber(n);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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