5:45 Callbacks 10:00 Async.js or analogues 15:47 Events 18:00 Promise 25:20 async/await 27:10 Functor + Chaining + composition 30:49 Problems of callback, async.js, Proimise, async/await 34:00 Add timeout to any function 36:55 Make function cancelable 37:59 More wrappers 39:22 Promisify and Callbackify 48:47 Sync function to async 41:43 Sync function to Promise 43:17 Convertors 43:31 Metasync 45:26 Function composition 47:09 Adynchronous function composition 47:58 Flow communication like in electronics 50:06 Collectors 59:17 Queue
Здравствуйте, Тимур. Возможно я неправильно понял, но я писал функции до Вашей реализации и думал, что реализация cancelable function должна быть такой function cancelable(fn){ var timer = null; var dec = (...args) => { timer = setTimeout(()=>{fn.apply(null, args)}, 0); }; dec.cancel = () => {clearTimeout(timer)}; return dec; } Спасибо за ваши лекции.
42:17 Почему нельзя просто вызвать синхронные функции в then? Ведь then и так всегда возвращает Promise Promise.resolve() .then(() => f1("value")) .then(f2) .then(f3) .then(f4) .then(console.log);
Спасибо за лекции действительно интересно и полезно. В начале видео, 9:08 на слайде, где callbacks сворачиваются с помощью bind, мне кажется, последних трех закрывающих фигурных скобок } быть не должно)) только круглые
Подскажите, разве не лучше в функции timeout (36мин) после return делать не timer=null , a clearTmeout(timer), так как setTimeout нам больше не нужен? Иначе он висит и мы всё равно в него заходим.
Да, конечно, этот пример кода давно исправлен, это старые лекции, лучше смотреть примеры их репозиториев на гитхабе github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/5-timeout.js
Тимур, интересует почему промисы менее производительны, чем колбеки? если промисы под капотом имеют колбеки, то из-за чего получается упадок производительности? Спасибо!
Из-за того, что промисы пораждают целую цепочку объектов, объединенных между собой через паттерн открытый конструктор, т.е. и замыкания порождаются и объекты, при чем, на каждый явно объявленный пропимис может порождаться их не один, а множество в зависимости от использования, промис же порождает цепочки промисов при каждом then.
@Timur Shemsedinov Тимур, подскажите пожалуйста где можно посмотреть как написана функция UTILS, которая позволяет после её вызова с переданной как аргумент функцией затем через точку на эту функцию навешивать выбранные обертки? (38:00 - 39:21 timecode)
Тут один из промеров по теме, думаю, достаточно понятный и в на главной странице репозитория есть ссылка на лекцию, в которой он обсуждается github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/b-optimzed.js
как для университетской начитки весьма достойно, но для практики и еще для нубов без примеров сложный материал получается. Кое что, кое как еще понимаешь, если уже хоть как-то сталкивался, тем кто первый раз смотрит не завидую
Вы в видео говорили, что коллбеки это наиболее производительный подход для асинхронного программирования. Но чуть позже этого видео в блоге разработчиков V8 вышла статья, в которой говорится что на данный момент async/await синтаксис даже с точки зрения производительности является наиболее предпочтительным. Это правда, или я что-то не так понял?
@@TimurShemsedinov Полную ссылку ютуб удалит, часть: /blog/fast-async . То, про что я именно писал в /blog/fast-async#conclusion . Советуют предпочитать синтаксис async/await синтаксису Промисов, относится ли это так же к синтаксису коллбеков?
Спасибо за лекцию. Только недавно начал разбирать ваш плейлист и ещё многое предстоит посмотреть и изучить . Мне , как специалисту и преподавателю очень полезен данный материал. Желаю вам сил и энтузиазма для дальнейшего развития . P.S Контракты в вашем понимании это способ обработки асинхронной операции ? Стандарт обработчиков (хендлеров) ?
Здравствуйте, Тимур! Прочитал вашу публикацию о том, что с 30 апреля вы убрали головую подписку и что обучение будет 3 месяца. А на год - интернатура. Как можно записаться на курс? Советуете ли вы сначала просмотреть прошлоголний курс в ютубе? Не пропущю ли я чего-то важного?
Пока выключил запись на курс по асинхронщине, переделываю структуру, но кто уже зашёл - учится до конца года. А по ноде и Node+Async ещё не выключил, хоть тоже хочу переделать. Время на реорганизацию материалов думаю найду в течении месяца и объявлю и тут и в своих группах в телеграме
@@TimurShemsedinov Благодарю за ответ! Пока что единственная возможность для оплаты курса и для взаимодействия с вами в целях обучения только через Patreon?
А как по скорости коллекторы из metasync с сравнении с последними нодами, если сравнивали? И еще интересно, по какой причине в описании курса Async 24 metasync помечена, как устаревшая библиотека?
Metasync уже не обновляется, новые возможности в нее уже не будут добавляться, это примерно как async.js уже не актуальна. Но все полезные абстракции перенесены в новую библиотеку github.com/metarhia/metautil вот те же коллекторы обновленные и адаптированные под последние версии ноды
Параллельное и последовательное исполнение уже можно делать через промисы, а вот для асинхронной очереди и коллекторов - до сих пор используем в проектах
Не в укор, просто чуть сбило это, подумал может есть какое-то отличие и я подзабыл, но вроде как нет. В функции `toPromise` можно было просто написать const toPromise = fn => (...args) => Promise.resolve(fn(...args));
@@TimurShemsedinov Добрый день. "а через new мы отложим исполнение на микротаск, это мягче для исполнения" - а как это вообще проверить? Если я правильно вас понял, получается когда я пишу new Promise(....) - это значит, что он должен зарезолвится позже чем Promise.resolve(...) ведь микро таски выполняются в последнюю очередь, но этого не происходит в моих тестах. Приведите, пожалуйста, пример как это проверить.
Почему вы, Тимур, не объясняете работу event loop, демультимлеплексора и вот этого вот всего процесса асинхронщины, а сразу переходите к примерам реализации.
Эта тема уже везде 100 раз обсуждена, но есть много чего, что менее известно, этим и занимаюсь в первую очередь. По ивентлупу смотрите ruclips.net/video/8aGhZQkoFbQ/видео.html или на русском ruclips.net/video/8cV4ZvHXQL4/видео.html
Тимур, спасибо за отличные лекции. Это лучшие материалы по Node.js какие можно найти. Есть вопрос, не могли бы вы пожалуйста просветить. К примеру у нас есть какой-то псевдокод в середине которого встречается обращение к файловой системе, или вызов таймаута или др. неблокирующая I.O. операция. Как двжок Node.js понимает что эту операцию нужно выполнять асинхронно и передавать ее выполнение в специальный API? По какому принципу V8 определяет что что-то он выполняет сразу например какой-то цикл, а что-то необходимо выполнить с отложенным вызовом.
Это не Node.js определяет, это определяется контрактом, если результат возвращается через колбэк, то вопрос его исполнения перекладывается на функцию, которая этот колбэк принимает, а она может его или сразу вызвать и тогда асинхронного исполнения не наступает, как происходит, например с Array.prototype.map или сохранить себе и вернуть управление, тогда исполнение идет дальше, пока стек вызовов не опустошится, и все, потом сохраненный колбэк вызывается, когда внешние данные подоспели и стек вызовов начинается уже с него. Ну а промисы - это просто абстракция над колбэками. Посмотрите курс про асинхронность целиком, это есть там.
30:46 Вот такой вариант пойдет? Выглядит проще + по скорости вроде одинаково и памяти function chain2() { const stack = []; let i = 0; const r = () => { const fn = stack[i++]; if (fn) fn(r); }; r.do = (fn, ...args) => { stack.push((cb) => fn(...args, cb)); return r; }; return r; }
@@TimurShemsedinov при просмотре данного видео которому уже более 4х, всегда возникало чувство на сколько оно актуально - понятно что колбеки и промисы это актуально но на счет отсального были мысли ) Вопрос где практику можно посмотреть по данному материалу если есть такая?
Так и не понял, как отменить Promise, который уже отправлен и ждет ответа, если он нам уже не нужен, с помощью функции cancelable? Объясните пожалуйста, если можете.
Смотря в каком примере, например, вот в этом: github.com/HowProgrammingWorks/Cancelable/blob/master/JavaScript/6-client.html Тут создается наследник от промиса и потом на его базе мы пишем свой fetch, он с таким же интерфейсом. Когда вызываем cancel то у xhr вызывается метод abort. Это удачный случай, но в большинстве случаев отменить сами операции невозможно, за то можно отменить resolve, чтоб промис возвращал ошибку.
Блин лекция по асинхронщине, в которой 80% это придуманные автором конструкции из самописных библиотек. Ну это конечно не плохо, но ГДЕ ПРАКТИЧЕСКАЯ ПОЛЬЗА? Я могу написать 100500 этих реализаций, но смысл какой?
Так это писалось когда... Сейчас качество примерно такое в новых видео, а недавно ещё улучшилось, разбираюсь потихоньку ruclips.net/video/moH8df67zAM/видео.htmlsi=Fvzcw4AiX_iyI2lB
5:45 Callbacks
10:00 Async.js or analogues
15:47 Events
18:00 Promise
25:20 async/await
27:10 Functor + Chaining + composition
30:49 Problems of callback, async.js, Proimise, async/await
34:00 Add timeout to any function
36:55 Make function cancelable
37:59 More wrappers
39:22 Promisify and Callbackify
48:47 Sync function to async
41:43 Sync function to Promise
43:17 Convertors
43:31 Metasync
45:26 Function composition
47:09 Adynchronous function composition
47:58 Flow communication like in electronics
50:06 Collectors
59:17 Queue
Тимур спасибо большое вам за ваши лекции и коллосальный труд.
Смотрю всё в разделе видео начиная с самых популярных
Как же круто! Тимур, огромное спасибо!
Очень крутые паттерны! Спасибо за видео, делайте ещё! ;-)
Здравствуйте, Тимур. Возможно я неправильно понял, но я писал функции до Вашей реализации и думал, что реализация cancelable function должна быть такой
function cancelable(fn){
var timer = null;
var dec = (...args) => {
timer = setTimeout(()=>{fn.apply(null, args)}, 0);
};
dec.cancel = () => {clearTimeout(timer)};
return dec;
}
Спасибо за ваши лекции.
назову сына или Нурбек или Айбек или Колбек
Варюшка переводится
Спасибо!
42:17 Почему нельзя просто вызвать синхронные функции в then? Ведь then и так всегда возвращает Promise
Promise.resolve()
.then(() => f1("value"))
.then(f2)
.then(f3)
.then(f4)
.then(console.log);
Спасибо за лекции действительно интересно и полезно. В начале видео, 9:08 на слайде, где callbacks сворачиваются с помощью bind, мне кажется, последних трех закрывающих фигурных скобок } быть не должно)) только круглые
Подскажите, разве не лучше в функции timeout (36мин) после return делать не timer=null , a clearTmeout(timer),
так как setTimeout нам больше не нужен?
Иначе он висит и мы всё равно в него заходим.
Да, конечно, этот пример кода давно исправлен, это старые лекции, лучше смотреть примеры их репозиториев на гитхабе github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/5-timeout.js
@@TimurShemsedinov Спасибо!!
Тимур, интересует почему промисы менее производительны, чем колбеки? если промисы под капотом имеют колбеки, то из-за чего получается упадок производительности? Спасибо!
Из-за того, что промисы пораждают целую цепочку объектов, объединенных между собой через паттерн открытый конструктор, т.е. и замыкания порождаются и объекты, при чем, на каждый явно объявленный пропимис может порождаться их не один, а множество в зависимости от использования, промис же порождает цепочки промисов при каждом then.
@Timur Shemsedinov Тимур, подскажите пожалуйста где можно посмотреть как написана функция UTILS, которая позволяет после её вызова с переданной как аргумент функцией затем через точку на эту функцию навешивать выбранные обертки? (38:00 - 39:21 timecode)
Тут один из промеров по теме, думаю, достаточно понятный и в на главной странице репозитория есть ссылка на лекцию, в которой он обсуждается github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/b-optimzed.js
@@TimurShemsedinov Спасибо!
как для университетской начитки весьма достойно, но для практики и еще для нубов без примеров сложный материал получается. Кое что, кое как еще понимаешь, если уже хоть как-то сталкивался, тем кто первый раз смотрит не завидую
Это только вступительная лекция с обзором, дальше по асинхронности много лнкций уже записано и еще будет.
Это курс по nodejs, по идее вы уже должны до определенной степени знать js
Вы в видео говорили, что коллбеки это наиболее производительный подход для асинхронного программирования.
Но чуть позже этого видео в блоге разработчиков V8 вышла статья, в которой говорится что на данный момент async/await синтаксис даже с точки зрения производительности является наиболее предпочтительным. Это правда, или я что-то не так понял?
Не знаю про какую статью вы говорите то такого быть не может 100%, пришлите мне ссылку на статью
@@TimurShemsedinov Полную ссылку ютуб удалит, часть: /blog/fast-async . То, про что я именно писал в /blog/fast-async#conclusion .
Советуют предпочитать синтаксис async/await синтаксису Промисов, относится ли это так же к синтаксису коллбеков?
Спасибо за лекцию. Только недавно начал разбирать ваш плейлист и ещё многое предстоит посмотреть и изучить . Мне , как специалисту и преподавателю очень полезен данный материал. Желаю вам сил и энтузиазма для дальнейшего развития .
P.S Контракты в вашем понимании это способ обработки асинхронной операции ? Стандарт обработчиков (хендлеров) ?
Нет, контракт это спецификация взаимодействия, выраженные в виде сигнатур, интерфейсов, схем или даже документации
ruclips.net/video/K5_kSUvbGEQ/видео.html
@@TimurShemsedinov Спасибо . Думал чуть позже на канале поискать , но не тут то было )
Теперь понятно почему Google с Dart решил завязать
Тимур, как вы считаете, есть смысл на 36:50 в возвращаемой функции добавить clearTimeout(timer) перед timer = null?
Здравствуйте, Тимур! Прочитал вашу публикацию о том, что с 30 апреля вы убрали головую подписку и что обучение будет 3 месяца. А на год - интернатура. Как можно записаться на курс? Советуете ли вы сначала просмотреть прошлоголний курс в ютубе? Не пропущю ли я чего-то важного?
Пока выключил запись на курс по асинхронщине, переделываю структуру, но кто уже зашёл - учится до конца года. А по ноде и Node+Async ещё не выключил, хоть тоже хочу переделать. Время на реорганизацию материалов думаю найду в течении месяца и объявлю и тут и в своих группах в телеграме
@@TimurShemsedinov Благодарю за ответ! Пока что единственная возможность для оплаты курса и для взаимодействия с вами в целях обучения только через Patreon?
@@mokhmad-salekh Пока да, но мы добавим другие варианты в ближайшие месяцы
@@TimurShemsedinov Будет ли возможность оплаты из стран где не работают карты?
@@как-о2ф нет, это же противозаконно
А как по скорости коллекторы из metasync с сравнении с последними нодами, если сравнивали? И еще интересно, по какой причине в описании курса Async 24 metasync помечена, как устаревшая библиотека?
Metasync уже не обновляется, новые возможности в нее уже не будут добавляться, это примерно как async.js уже не актуальна. Но все полезные абстракции перенесены в новую библиотеку github.com/metarhia/metautil вот те же коллекторы обновленные и адаптированные под последние версии ноды
@@TimurShemsedinovпонятно, спасибо
Насколько актуально использовать metasync на сегодняшний день?
Параллельное и последовательное исполнение уже можно делать через промисы, а вот для асинхронной очереди и коллекторов - до сих пор используем в проектах
@@TimurShemsedinov спасибо большое)
Не в укор, просто чуть сбило это, подумал может есть какое-то отличие и я подзабыл, но вроде как нет. В функции `toPromise` можно было просто написать const toPromise = fn => (...args) => Promise.resolve(fn(...args));
Разница есть, Promise.resolve создает сразу заресолвленный промис, а через new мы отложим исполнение на микротаск, это мягче для исполнения
@@TimurShemsedinov Добрый день. "а через new мы отложим исполнение на микротаск, это мягче для исполнения" - а как это вообще проверить? Если я правильно вас понял, получается когда я пишу new Promise(....) - это значит, что он должен зарезолвится позже чем Promise.resolve(...) ведь микро таски выполняются в последнюю очередь, но этого не происходит в моих тестах. Приведите, пожалуйста, пример как это проверить.
Подскажите, пожалуйста, может Вы знаете набор задач/упражнений для отработки теории? Лекции бомба) Спасибо!
Есть nodeschool.io, но он уже порядком устарел и не покрывает всех тем. Я собераюсь готовить такие задачи скоро.
@@TimurShemsedinov там задачки детского уровня. Сообщите, пожалуйста, обязательно на канале, если приготовите.
Почему вы, Тимур, не объясняете работу event loop, демультимлеплексора и вот этого вот всего процесса асинхронщины, а сразу переходите к примерам реализации.
Эта тема уже везде 100 раз обсуждена, но есть много чего, что менее известно, этим и занимаюсь в первую очередь. По ивентлупу смотрите ruclips.net/video/8aGhZQkoFbQ/видео.html или на русском ruclips.net/video/8cV4ZvHXQL4/видео.html
@@TimurShemsedinov Спасибо за ответ.
З ковішилдом, який пані Иарина назвала шмурдяком, пускали в Польщу?
Тимур, спасибо за отличные лекции. Это лучшие материалы по Node.js какие можно найти. Есть вопрос, не могли бы вы пожалуйста просветить. К примеру у нас есть какой-то псевдокод в середине которого встречается обращение к файловой системе, или вызов таймаута или др. неблокирующая I.O. операция. Как двжок Node.js понимает что эту операцию нужно выполнять асинхронно и передавать ее выполнение в специальный API? По какому принципу V8 определяет что что-то он выполняет сразу например какой-то цикл, а что-то необходимо выполнить с отложенным вызовом.
Это не Node.js определяет, это определяется контрактом, если результат возвращается через колбэк, то вопрос его исполнения перекладывается на функцию, которая этот колбэк принимает, а она может его или сразу вызвать и тогда асинхронного исполнения не наступает, как происходит, например с Array.prototype.map или сохранить себе и вернуть управление, тогда исполнение идет дальше, пока стек вызовов не опустошится, и все, потом сохраненный колбэк вызывается, когда внешние данные подоспели и стек вызовов начинается уже с него. Ну а промисы - это просто абстракция над колбэками. Посмотрите курс про асинхронность целиком, это есть там.
@@TimurShemsedinov Спасибо за ответ, посмотрю.
30:46
Вот такой вариант пойдет? Выглядит проще + по скорости вроде одинаково и памяти
function chain2() {
const stack = [];
let i = 0;
const r = () => {
const fn = stack[i++];
if (fn) fn(r);
};
r.do = (fn, ...args) => {
stack.push((cb) => fn(...args, cb));
return r;
};
return r;
}
Async.js уже давно не актуален на сколько я понимаю?
Разве что для легаси проектов и тренировки
@@TimurShemsedinov при просмотре данного видео которому уже более 4х, всегда возникало чувство на сколько оно актуально - понятно что колбеки и промисы это актуально но на счет отсального были мысли ) Вопрос где практику можно посмотреть по данному материалу если есть такая?
41:37 вмест двух строчек можно написать const callback = args.pop() Ведь метод pop как раз и возвращает последний элемент
Так и не понял, как отменить Promise, который уже отправлен и ждет ответа, если он нам уже не нужен, с помощью функции cancelable? Объясните пожалуйста, если можете.
Смотря в каком примере, например, вот в этом: github.com/HowProgrammingWorks/Cancelable/blob/master/JavaScript/6-client.html
Тут создается наследник от промиса и потом на его базе мы пишем свой fetch, он с таким же интерфейсом. Когда вызываем cancel то у xhr вызывается метод abort. Это удачный случай, но в большинстве случаев отменить сами операции невозможно, за то можно отменить resolve, чтоб промис возвращал ошибку.
Блин лекция по асинхронщине, в которой 80% это придуманные автором конструкции из самописных библиотек. Ну это конечно не плохо, но ГДЕ ПРАКТИЧЕСКАЯ ПОЛЬЗА? Я могу написать 100500 этих реализаций, но смысл какой?
Все портит ужасный микрофон😑
Так это писалось когда... Сейчас качество примерно такое в новых видео, а недавно ещё улучшилось, разбираюсь потихоньку ruclips.net/video/moH8df67zAM/видео.htmlsi=Fvzcw4AiX_iyI2lB