В чем смысл промисов?
Такой вопрос. Какой смысл промисов если все равно устанавливаешь таймер на запуск следующей функции? Ну т.е мне например надо начать выполнять асинхронный кусок кода тогда, когда закончится первый кусок, но в промисах я же просто выставляю таймер когда запускать второй. А что если первый кусок кода не закончит свое выполнение и запустится второй? Может кто прояснить
Ответы (1 шт):
Промисы это не таймер а обещание, которое после завершения дает тебе ответ
- Промисы имеют 3 состояния -
выполняем... \ да \ нет - или как написано в википедии -
В процессе \ Обещание кончено (resolve) \ Обещание кончено отверганием (reject)
Всё как в жизни, можно выполнить обещание или не выполнить, промежутка никакого нет
Когда промис в процессе выполнения, его нужно дождаться через await или можно использовать .then для этого
Код выглядит следующим образом:
(()=>{
const mypromise = new Promise((resolve, reject)=>{
resolve(1); // Обещание выполняем, возвращаем еденитцу
// resolve [and] reject ~= return
}).then((some)=>{
some += 100; // добавляем к some(еденитце) - сот очку
return some;
});
// здесь у тебя возвращается НЕвыполненное обещание
console.log(mypromise);
// А здесь, мы ждем выполнения(через .then ~= следующий шаг), и уже выводим 101
mypromise.then((value)=>{console.log(value);});
})();
Если тебе они не понятны или конструкция не нрав, можешь использовать async \ await или использовать их совместно
const sleep=(ms)=>new Promise((r)=>setTimeout(r, ms));
const a=()=>{
return new Promise((resolve, reject)=>resolve(1)).then((va)=>va+100);
};
(async()=>{
const mypromise = a();
// здесь у тебя возвращается НЕвыполненное обещание
console.log(mypromise);
// но тут вернется респонс
console.log(await mypromise);
await sleep(2000); // можно ждать в асинхроне
console.log('_');
/// Либо еще раз про разницу в двух словах:
// await ждет как в синхроне
console.log(await a());
// .then - обработчик после
a().then((b)=>console.log(b));
console.log('a().then below');
})();
Видимо речь про этот таймер, или ты нашел гайд васяна, в любом случае рекомендую learn.javascript.ru (11 параграф)
const sleep=(ms)=>new Promise((r)=>setTimeout(r, ms));