Промисы в Javascript
Вставка
- Опубліковано 7 лют 2025
- В этом видео, мы с вами разберем как работают Promise в javascript. Рассмотрим пример создания собственных общещаний - отжиманий и пресаданий. А так же научимся использовать промисы в разных синтаксисах. Через then/catch, и через async/await!
Код с занятия: github.com/tro...
Ставьте лайк и подписывайтесь!
Instagram: / v.trostinsky
Facebook: / trostinsky
GitHub: github.com/tro...
Четкие примерчики. Прекрасная идея-ассоциация с тренировкой 🎉
Это видео очень сильно помогло мне. До этого я посмотрел несколько видосов и никак не мог врубиться даже зачем используют setTimeOut. Благодарю!
Лучшее объяснение для чего нужны промисы! Отдельное спасибо за отличное качество видео и за крупный шрифт в редакторе! Сразу видно, что думали о людях которые будут смотреть ваш ролик.
Благодарю)
Помог вспомнить промисы, благодарю.
Самое понятное объяснение из всех что я видел, скорей всего за счёт понятных абстракций. Подписка.
Спасибо!)
Спасибо, самое понятное объяснение из всех, что пересмотрела.
хуйнф - ничё не понятно
Спасибо, достаточно полно и понятно раскрыта тема.
Крутой урок, я стала ближе к пониманию промисов, чем после просмотра нескольких видосов и чтения доков.
Если будут какие-либо вопросы, пишите, сделаем еще видео!)
Огромное спасибо! Вторые сутки пытаюсь детально понять promise (async-await), вот с Вашим видео дошло наконец! Побольше таких видосов!
Благодарю :) У меня в планах есть вторая часть по более сложным концепциям, например, множественным промисам!
сподобалося, хотілося б більше таких коротких і змістовних відео!)
Оксана Санаж на какую тему?:)
Благодарю за урок! Очень доступно объясняете
ой годнота! блин, прям нужно было отдельное видео по этой теме) лайк и репост господа, лайк и репост...
Спасибо! Очень рад что видео несёт пользу!)
Спасибо. Очень наглядно и доходчиво!
Интересное объяснение с отжиманиями и приседаниями :)
Усовершенствовал алгоритм:
1) Теперь при каждом отжимании или приседании в консоль будет выводится, сколько уже выполнено
2) Если задано больше повторений, чем возможно сделать, будет сделано максимум возможных повторений.
3) Если максимум отжиманий достигнут, приседания будут выполняться все равно.
// Время на одно повторение отжимания / приседания
const pushUpTime = 1000;
const squatTime = 700;
// Максимум отжиманий и приседаний соответственно
const maxPossiblePushUps = 5;
const maxPossibleSquats = 20;
// Количество отжиманий и приседаний, которое надо выполнить
let pushNum = 15;
let squadsNum = 10;
function pushUps(count) {
return new Promise( (resolve, reject) => {
let completed = 0;
console.log('Приступаю к отжиманиям');
setTimeout(function work() {
completed++;
console.log('Отжиманий выполнено: ' + completed);
if (completed >= maxPossiblePushUps) reject(new Error('too many push ups, tired...'));
if (completed < count && completed < maxPossiblePushUps) {
setTimeout(work, pushUpTime);
} else {
resolve('Отжимания выполнены');
}
}, pushUpTime);
});
}
function squats(count) {
return new Promise( (resolve, reject) => {
let completed = 0;
console.log('Приступаю к приседаниям');
setTimeout(function work() {
completed++;
console.log('Приседаний выполнено: ' + completed);
if (completed >= maxPossibleSquats) reject(new Error('too many squats, tired...'));
if (completed < count && completed < maxPossibleSquats) {
setTimeout(work, squatTime);
} else {
resolve('Приседания выполнены');
}
}, squatTime);
});
}
pushUps(pushNum).catch(err => {
return Promise.resolve(err.message);
}).then((result) => {
console.log(result);
return squats(squadsNum);
}).catch(err => console.log(err.message)).finally(() => console.log('Упражнения завершены'));
Спасибо) получилось действительно интересно)
Невероятно крутой видос, автор все разложил по полочкам. Спасибо!
Бомбезное объяснение👍
Спасибо, хороший и очень понятный пример использования Промисов.
Будет супер-полезно, если Вы сделаете ролик с использованием промисов на практике. Очень хотелось бы увидеть, как с помощью них подключаются к БД, например, mysql и выводят что-то на страницу
Спасибо за обратную связь!)
Думаю это вполне реально, сделать несколько практических примеров! Подумаю и запишу обязательно!)
Очень круто разъяснил) Спасибо тебе большое, пример очень понятный и практичный лично для меня) Удачи в дальнейших роликах, у тебя талант)
Спасибо большое!) Очень мотивируют такие сообщения!
Урок супер
Лучшее объяснение о промисах! Спасибо!
Спасибо! Очень приятно знать, что делаю что-то важное!
Классное видео, самое хорошее обьяснение промисов
Спасибо!:)
Годно. Не останавливайся!
Виктор Астахов спасибо, уже готовлю следующее 😉
Спасибо большое процветанию твоему каналу удачи тебе бро!!!
спасибо за четкое объяснение!
Спс очень просто и понятно обяснил. С меня лайк
Классный урок. Просто и понятно. Спасибо!
Большое спасибо, очень полезный урок.
Спасибо! Хорошее видео и пример хороший !)
Спасибо!)
Отличное объясняете, спасибо!
Спасибо!)
Надо было функцию Давидыч назвать
Сел встал сел встал
Очень круто!! Очень доступно!
хороший видос
Спасибо!
Очень интересно и информативно! Узнал, что такое promises и Async/await. А то на learnjs читал, не мог понять что это вообще такое. Спасибо) Интересно, почему так редко видео выходят? Времени нет или мотивации?
Спасибо за комментарий) Постоянно сам хочу чаще записывать, наверное тут вопрос мотивации, бывает целый день уходит чтобы видео сделать)
Думаю добавить донаты какие то и будет чаще)
Круто, спасибо
все супер, но отжимания это push ups, а wring out это выжимать)
может, он жим лежа делает в зале :)
спасибо большое
хорошо объяснил
Push-ups, а не wringouts. Второе - это отжимать в смысле отжимать бельё, платок или тряпку.
лучший
Хорошее видео , все понравилось )) запущу бота , путь заслуженно пролайкает тебя в инстаграме . лайк и подписка +
енди уорхл спасибо!)
Даешь async-await туториал!
Async/await будет следующим :)
@@jsacademy772 вы же уже рассмотрели async await в этом видео
@@kalmanbraz7696 на самом деле, в видео не хватает более сложных ситуаций использования Async/Await. Например, когда нам нужно выполнить 3-4 запроса на разные сервера, где очередность важна. Или получить данные по 1000 пользователям из стороннего апи в ограничениями на кол-во запросов от одного клиента (или кол-во запросов в секунду). Тут бывает полезно применять циклы или методы из встроенного Promises API, которые в видео не были рассмотрены, вот об этом и речь :)
@@jsacademy772 тогда было бы неплохо сделать видео, чето трудно мне эта тема дается)
@@jsacademy772 лол, ну и где?
2:19 В функцию без параметров (wringOut) передаем параметр. Как так?
Это пример использования на видео, для того, чтобы не усложнять восприятие опущены детали реализации функции. Но есть способ через псевдомассив arguments это сделать, можем пофантазировать что внутри тела функции (...) используется именно он 🙂🙃
В последнем примере, функция myTraining вернула false из блока catch. Каким образом, результат выполнения попал в then и был выведен в консоль, если был передан только аргумент result, который принимаетзначение из успешно разрешенного промиса?
Т.к мы обработали ошибку внутри функции myTraining, эта ошибка у нас вверх не всплывает, мы её перехватили. Поэтому эта функция у нас была успешно выполнена, и т.к в случае ошибки мы возвращаем из функции false, именно он и попал в then
JS ACADEMY - Влад Грибенников спасибо, а в каком случае, результат бы попал не в then, а в catch?
Если бы мы не указали try/catch в функции myTraining, то ошибка как-бы всплывала бы до первого такого обработчика(если он есть). Другими словами: там где мы укажем catch там и словим ошибку :)
JS ACADEMY - Влад Грибенников ну а если у нас, допустим, ситуация, когда произошла ошибка, выполнение перешло в блок catch и далее у меня есть обработчики then и catch, как мне сделать так, чтобы выполнился код, который прописан в catch?
Тут лучше всего пробросить ошибку дальше. В первом catch пишем throw err(err - переменная с ошибкой, то что в скобках catch указано), таким образом можно обработать ошибку даже в двух местах
Отличный ролик, все так понятно объясниил. Это не официальную документацию читать по несколько раз и в итоге ничего не понимать
Зачем запятая на 9:35 перед умножением времени на количество ?Без нее не работает,не могу понять какую функцию она выполняет
Эта запятая перед вторым аргументом в функции setTimeout. Первый аргумент это функция-коллбек, а второй - когда эта функция должна сработать
@@jsacademy772 спасибо
в начале видео неправильный синтаксис идет (если конечно это не псевдокод):
1. сначала у автора в переменную const wringOut = () => new Promise(...), записывается анонимная функция без параметров, которую он вызывает дальше с аргументом 10: wringOut(10).then(.....)
{ в принципе такая логика возможна, если только сам автор в логике Promse использует чтото вроде -> arguments[0] как первый параметр анонимной функции, но чтото я cомневаюсь}
2. буквально в следующем слайде уже в const wringOut = new Promise(...) просто записывается объект(НЕ ФУНКЦИЯ), которая вызывается как функция с аргументом 10 (ошибка!!!)
Так же замечу что async/await это не просто синтаксический сахар как например классы. С async/await можно делать то, что с промисами сделать очень сложно. Поскольку оператор await наподобие yield в генераторах, то остановка происходит на каждом выражении перед которым стоит await, что позволяет с легкостью использовать его в циклах, или сложных условиях.
На слайдах нет синтаксических ошибок, я в видео делал акцент на том, что троеточие - это реализация функции, которая будет рассмотрена позже)
По async/await возможно и правда стоит записать отдельное видео чтобы разъяснить где их лучше/удобнее использовать, однако они все-равно являются синтаксическим сахаром, потому как можно писать и через then, так и через async/await. Второй вариант выглядит просто гораздо аккуратнее, короче и легче воспринимается, но работает все-равно аналогично цепочке промисов 🤷♂️
Иии примерно через 5 секунд ... пишу код и сам не верю )
Не надо было пояснять про Promise и async\await вместе. Слишком много упускается вещей!
Недостаточно раскрыто вот что:
1. Что является вторым аргументом в then ? и как это связано с catch?
2. Что если асинхронная функция не возвращает промиса, что делать? И причем тут Promisify ?
Много чего можно было добавить. Просто не нужно мешать разные темы. Разве что потом, когда уже одно и второе пояснил сделать обобщенную про то как async\await сокращает код
По первому не расскрыл, потому, что я считаю второй аргумент в then бесполезным и неэффективным. А второй пункт я вообще не понял) Асинхронная функция всегда возвращает промис, и, действительно, при чем тут Promisify?
Я не включил в видео много нюансов, для того, чтобы упростить понимание промисов. Если записывать видео про всё что есть по этой теме, это будет несколько часов, да и думаю таких видео в интернете навалом)
Целью этого видео не было дать полную информацию о всех возможных вариантах работы с промисами, а дать знания, которые используются на практике в 95% случаев. Видео расчитано на людей, начинающих знакомство с джаваскриптом, у которых трудности с пониманием как работают промисы.
@@jsacademy772 Спасибо за старания! Они видны. Но все-таки надо ольше именно было раскрыть про второй параметр. Ведь приходя на работу человек сталкивается с Legacy-кодом, т.е. с тем что уже написано. Одно дело знать Best practices и др. им следовать. Не всегда есть возможность следовать. Более того даже читая код надо знать что он делает, чтоб корректно переписать на best practices .
А так да, все супер! ;)
Спасибо)