💻 Асинхронное программирование в Node.js и JavaScript

Поделиться
HTML-код
  • Опубликовано: 14 ноя 2024

Комментарии • 75

  • @apanchuk
    @apanchuk 4 года назад +71

    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

  • @ЕвгенийЛ-с5ч
    @ЕвгенийЛ-с5ч 5 лет назад +42

    Тимур спасибо большое вам за ваши лекции и коллосальный труд.

  • @TrancePartyVideo
    @TrancePartyVideo 2 месяца назад

    Смотрю всё в разделе видео начиная с самых популярных

  • @Омега-м8ш
    @Омега-м8ш 7 месяцев назад +1

    Как же круто! Тимур, огромное спасибо!

  • @НиколайСладкий-н4к
    @НиколайСладкий-н4к 5 лет назад +9

    Очень крутые паттерны! Спасибо за видео, делайте ещё! ;-)

  • @arver1
    @arver1 5 лет назад +2

    Здравствуйте, Тимур. Возможно я неправильно понял, но я писал функции до Вашей реализации и думал, что реализация cancelable function должна быть такой
    function cancelable(fn){
    var timer = null;
    var dec = (...args) => {
    timer = setTimeout(()=>{fn.apply(null, args)}, 0);
    };
    dec.cancel = () => {clearTimeout(timer)};
    return dec;
    }
    Спасибо за ваши лекции.

  • @Hayabusa17
    @Hayabusa17 2 года назад +8

    назову сына или Нурбек или Айбек или Колбек

  • @timashoff
    @timashoff Год назад

    Спасибо!

  • @ell1ar
    @ell1ar 8 месяцев назад +1

    42:17 Почему нельзя просто вызвать синхронные функции в then? Ведь then и так всегда возвращает Promise
    Promise.resolve()
    .then(() => f1("value"))
    .then(f2)
    .then(f3)
    .then(f4)
    .then(console.log);

  • @ДмитрийВдовиченко-й5м

    Спасибо за лекции действительно интересно и полезно. В начале видео, 9:08 на слайде, где callbacks сворачиваются с помощью bind, мне кажется, последних трех закрывающих фигурных скобок } быть не должно)) только круглые

  • @Vllad_Ko
    @Vllad_Ko 5 месяцев назад +1

    Подскажите, разве не лучше в функции timeout (36мин) после return делать не timer=null , a clearTmeout(timer),
    так как setTimeout нам больше не нужен?
    Иначе он висит и мы всё равно в него заходим.

    • @TimurShemsedinov
      @TimurShemsedinov  5 месяцев назад

      Да, конечно, этот пример кода давно исправлен, это старые лекции, лучше смотреть примеры их репозиториев на гитхабе github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/5-timeout.js

    • @Vllad_Ko
      @Vllad_Ko 5 месяцев назад

      @@TimurShemsedinov Спасибо!!

  • @yurisolovyov609
    @yurisolovyov609 4 года назад +9

    Тимур, интересует почему промисы менее производительны, чем колбеки? если промисы под капотом имеют колбеки, то из-за чего получается упадок производительности? Спасибо!

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +20

      Из-за того, что промисы пораждают целую цепочку объектов, объединенных между собой через паттерн открытый конструктор, т.е. и замыкания порождаются и объекты, при чем, на каждый явно объявленный пропимис может порождаться их не один, а множество в зависимости от использования, промис же порождает цепочки промисов при каждом then.

  • @nikitaalekseev991
    @nikitaalekseev991 2 года назад +1

    @Timur Shemsedinov Тимур, подскажите пожалуйста где можно посмотреть как написана функция UTILS, которая позволяет после её вызова с переданной как аргумент функцией затем через точку на эту функцию навешивать выбранные обертки? (38:00 - 39:21 timecode)

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +2

      Тут один из промеров по теме, думаю, достаточно понятный и в на главной странице репозитория есть ссылка на лекцию, в которой он обсуждается github.com/HowProgrammingWorks/Wrapper/blob/master/JavaScript/b-optimzed.js

    • @nikitaalekseev991
      @nikitaalekseev991 2 года назад +1

      @@TimurShemsedinov Спасибо!

  • @grantorino3465
    @grantorino3465 5 лет назад +5

    как для университетской начитки весьма достойно, но для практики и еще для нубов без примеров сложный материал получается. Кое что, кое как еще понимаешь, если уже хоть как-то сталкивался, тем кто первый раз смотрит не завидую

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад +3

      Это только вступительная лекция с обзором, дальше по асинхронности много лнкций уже записано и еще будет.

    • @SilverStormAndGoldenRain
      @SilverStormAndGoldenRain 4 года назад +1

      Это курс по nodejs, по идее вы уже должны до определенной степени знать js

  • @тимур_атмосферный
    @тимур_атмосферный Месяц назад

    Вы в видео говорили, что коллбеки это наиболее производительный подход для асинхронного программирования.
    Но чуть позже этого видео в блоге разработчиков V8 вышла статья, в которой говорится что на данный момент async/await синтаксис даже с точки зрения производительности является наиболее предпочтительным. Это правда, или я что-то не так понял?

    • @TimurShemsedinov
      @TimurShemsedinov  Месяц назад

      Не знаю про какую статью вы говорите то такого быть не может 100%, пришлите мне ссылку на статью

    • @тимур_атмосферный
      @тимур_атмосферный Месяц назад

      @@TimurShemsedinov Полную ссылку ютуб удалит, часть: /blog/fast-async . То, про что я именно писал в /blog/fast-async#conclusion .
      Советуют предпочитать синтаксис async/await синтаксису Промисов, относится ли это так же к синтаксису коллбеков?

  • @LNMaster_
    @LNMaster_ 2 года назад +2

    Спасибо за лекцию. Только недавно начал разбирать ваш плейлист и ещё многое предстоит посмотреть и изучить . Мне , как специалисту и преподавателю очень полезен данный материал. Желаю вам сил и энтузиазма для дальнейшего развития .
    P.S Контракты в вашем понимании это способ обработки асинхронной операции ? Стандарт обработчиков (хендлеров) ?

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +1

      Нет, контракт это спецификация взаимодействия, выраженные в виде сигнатур, интерфейсов, схем или даже документации

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +1

      ruclips.net/video/K5_kSUvbGEQ/видео.html

    • @LNMaster_
      @LNMaster_ 2 года назад

      @@TimurShemsedinov Спасибо . Думал чуть позже на канале поискать , но не тут то было )

  • @zhandosissayev9798
    @zhandosissayev9798 Месяц назад

    Теперь понятно почему Google с Dart решил завязать

  • @mikhailm.887
    @mikhailm.887 2 года назад +1

    Тимур, как вы считаете, есть смысл на 36:50 в возвращаемой функции добавить clearTimeout(timer) перед timer = null?

  • @mokhmad-salekh
    @mokhmad-salekh 6 месяцев назад +1

    Здравствуйте, Тимур! Прочитал вашу публикацию о том, что с 30 апреля вы убрали головую подписку и что обучение будет 3 месяца. А на год - интернатура. Как можно записаться на курс? Советуете ли вы сначала просмотреть прошлоголний курс в ютубе? Не пропущю ли я чего-то важного?

    • @TimurShemsedinov
      @TimurShemsedinov  6 месяцев назад

      Пока выключил запись на курс по асинхронщине, переделываю структуру, но кто уже зашёл - учится до конца года. А по ноде и Node+Async ещё не выключил, хоть тоже хочу переделать. Время на реорганизацию материалов думаю найду в течении месяца и объявлю и тут и в своих группах в телеграме

    • @mokhmad-salekh
      @mokhmad-salekh 6 месяцев назад

      @@TimurShemsedinov Благодарю за ответ! Пока что единственная возможность для оплаты курса и для взаимодействия с вами в целях обучения только через Patreon?

    • @TimurShemsedinov
      @TimurShemsedinov  6 месяцев назад +2

      @@mokhmad-salekh Пока да, но мы добавим другие варианты в ближайшие месяцы

    • @как-о2ф
      @как-о2ф 2 месяца назад

      @@TimurShemsedinov Будет ли возможность оплаты из стран где не работают карты?

    • @TimurShemsedinov
      @TimurShemsedinov  2 месяца назад

      @@как-о2ф нет, это же противозаконно

  • @theloveopium
    @theloveopium 2 месяца назад

    А как по скорости коллекторы из metasync с сравнении с последними нодами, если сравнивали? И еще интересно, по какой причине в описании курса Async 24 metasync помечена, как устаревшая библиотека?

    • @TimurShemsedinov
      @TimurShemsedinov  2 месяца назад +1

      Metasync уже не обновляется, новые возможности в нее уже не будут добавляться, это примерно как async.js уже не актуальна. Но все полезные абстракции перенесены в новую библиотеку github.com/metarhia/metautil вот те же коллекторы обновленные и адаптированные под последние версии ноды

    • @theloveopium
      @theloveopium 2 месяца назад

      ​@@TimurShemsedinovпонятно, спасибо

  • @andrzej.1626
    @andrzej.1626 Год назад +1

    Насколько актуально использовать metasync на сегодняшний день?

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад +1

      Параллельное и последовательное исполнение уже можно делать через промисы, а вот для асинхронной очереди и коллекторов - до сих пор используем в проектах

    • @andrzej.1626
      @andrzej.1626 Год назад

      @@TimurShemsedinov спасибо большое)

  • @programming-as-art
    @programming-as-art 4 года назад +1

    Не в укор, просто чуть сбило это, подумал может есть какое-то отличие и я подзабыл, но вроде как нет. В функции `toPromise` можно было просто написать const toPromise = fn => (...args) => Promise.resolve(fn(...args));

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +4

      Разница есть, Promise.resolve создает сразу заресолвленный промис, а через new мы отложим исполнение на микротаск, это мягче для исполнения

    • @banan4ik69
      @banan4ik69 4 года назад

      @@TimurShemsedinov Добрый день. "а через new мы отложим исполнение на микротаск, это мягче для исполнения" - а как это вообще проверить? Если я правильно вас понял, получается когда я пишу new Promise(....) - это значит, что он должен зарезолвится позже чем Promise.resolve(...) ведь микро таски выполняются в последнюю очередь, но этого не происходит в моих тестах. Приведите, пожалуйста, пример как это проверить.

  • @MaxI-fw1vv
    @MaxI-fw1vv 5 лет назад +6

    Подскажите, пожалуйста, может Вы знаете набор задач/упражнений для отработки теории? Лекции бомба) Спасибо!

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад +8

      Есть nodeschool.io, но он уже порядком устарел и не покрывает всех тем. Я собераюсь готовить такие задачи скоро.

    • @electfreak
      @electfreak 5 лет назад +2

      @@TimurShemsedinov там задачки детского уровня. Сообщите, пожалуйста, обязательно на канале, если приготовите.

  • @carlschmaiser9595
    @carlschmaiser9595 4 года назад +1

    Почему вы, Тимур, не объясняете работу event loop, демультимлеплексора и вот этого вот всего процесса асинхронщины, а сразу переходите к примерам реализации.

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +2

      Эта тема уже везде 100 раз обсуждена, но есть много чего, что менее известно, этим и занимаюсь в первую очередь. По ивентлупу смотрите ruclips.net/video/8aGhZQkoFbQ/видео.html или на русском ruclips.net/video/8cV4ZvHXQL4/видео.html

    • @carlschmaiser9595
      @carlschmaiser9595 4 года назад +1

      @@TimurShemsedinov Спасибо за ответ.

  • @MadHeadAlex
    @MadHeadAlex 3 года назад

    З ковішилдом, який пані Иарина назвала шмурдяком, пускали в Польщу?

  • @user-dysekh
    @user-dysekh 3 года назад

    Тимур, спасибо за отличные лекции. Это лучшие материалы по Node.js какие можно найти. Есть вопрос, не могли бы вы пожалуйста просветить. К примеру у нас есть какой-то псевдокод в середине которого встречается обращение к файловой системе, или вызов таймаута или др. неблокирующая I.O. операция. Как двжок Node.js понимает что эту операцию нужно выполнять асинхронно и передавать ее выполнение в специальный API? По какому принципу V8 определяет что что-то он выполняет сразу например какой-то цикл, а что-то необходимо выполнить с отложенным вызовом.

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +2

      Это не Node.js определяет, это определяется контрактом, если результат возвращается через колбэк, то вопрос его исполнения перекладывается на функцию, которая этот колбэк принимает, а она может его или сразу вызвать и тогда асинхронного исполнения не наступает, как происходит, например с Array.prototype.map или сохранить себе и вернуть управление, тогда исполнение идет дальше, пока стек вызовов не опустошится, и все, потом сохраненный колбэк вызывается, когда внешние данные подоспели и стек вызовов начинается уже с него. Ну а промисы - это просто абстракция над колбэками. Посмотрите курс про асинхронность целиком, это есть там.

    • @user-dysekh
      @user-dysekh 3 года назад

      @@TimurShemsedinov Спасибо за ответ, посмотрю.

  • @grenadier1653
    @grenadier1653 2 года назад

    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;
    }

  • @dmytrohaponov5517
    @dmytrohaponov5517 Год назад +1

    Async.js уже давно не актуален на сколько я понимаю?

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад

      Разве что для легаси проектов и тренировки

    • @dmytrohaponov5517
      @dmytrohaponov5517 Год назад

      @@TimurShemsedinov при просмотре данного видео которому уже более 4х, всегда возникало чувство на сколько оно актуально - понятно что колбеки и промисы это актуально но на счет отсального были мысли ) Вопрос где практику можно посмотреть по данному материалу если есть такая?

  • @victorklimov5254
    @victorklimov5254 3 года назад

    41:37 вмест двух строчек можно написать const callback = args.pop() Ведь метод pop как раз и возвращает последний элемент

  • @АлександрКостров-ф6й

    Так и не понял, как отменить Promise, который уже отправлен и ждет ответа, если он нам уже не нужен, с помощью функции cancelable? Объясните пожалуйста, если можете.

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +3

      Смотря в каком примере, например, вот в этом: github.com/HowProgrammingWorks/Cancelable/blob/master/JavaScript/6-client.html
      Тут создается наследник от промиса и потом на его базе мы пишем свой fetch, он с таким же интерфейсом. Когда вызываем cancel то у xhr вызывается метод abort. Это удачный случай, но в большинстве случаев отменить сами операции невозможно, за то можно отменить resolve, чтоб промис возвращал ошибку.

  • @Сергей-у3к8й
    @Сергей-у3к8й Месяц назад

    Блин лекция по асинхронщине, в которой 80% это придуманные автором конструкции из самописных библиотек. Ну это конечно не плохо, но ГДЕ ПРАКТИЧЕСКАЯ ПОЛЬЗА? Я могу написать 100500 этих реализаций, но смысл какой?

  • @akaikangaroo
    @akaikangaroo 5 месяцев назад +1

    Все портит ужасный микрофон😑

    • @TimurShemsedinov
      @TimurShemsedinov  5 месяцев назад

      Так это писалось когда... Сейчас качество примерно такое в новых видео, а недавно ещё улучшилось, разбираюсь потихоньку ruclips.net/video/moH8df67zAM/видео.htmlsi=Fvzcw4AiX_iyI2lB