@alekssamos
Программист любитель

Как правильно делать промисы?

Никак не могу разобраться с промисами.
Как надо правильно?
Я ожидаю, что каждый .then выполнится через последующие 5 секунд,
т.е. между каждым alert будет промежуток 5 сек.
Но он работает так: первый раз ждёт, а второй и третий выполняет сразу без ожидания.
Что не так?
let p = new Promise(function(resolve, reject){
	setTimeout(resolve, 5000);
});

p
	.then( () => { alert(1); } )
	.then( () => { alert(2); } )
	.then( () => { alert(3); } );
  • Вопрос задан
  • 180 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const wait = time => new Promise(r => setTimeout(r, time));

wait(1000)
  .then(() => { console.log(1); return wait(1000); })
  .then(() => { console.log(2); return wait(1000); })
  .then(() => { console.log(3); });
Ответ написан
Комментировать
bootd
@bootd
Гугли и ты откроешь врата знаний!
p исполнится через 5 секунда, а then - это то, что будет после 5 секунд. Если вы хотите, что бы все then были через 5 секунд, то then должен возвращать также промис. А у вас then ничего не возвращает, а просто показывает alert. Оберните вызов alert в промисы с таймером и тогда будет счастье
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Внимательно почитайте. Ваш пример слишком синтетический, ну и я никак не могу понять вашу логику, почему вы ждете что каждый then будет с задержкой, Promise то у вас один и он уже зарезолвился через 5 секунд, в каком месте вашего кода вы ждете что задержка сработает еще раз ?
https://habr.com/ru/company/mailru/blog/269465/
Ответ написан
Ваш ответ на вопрос

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

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