Асинхронные функции, async/await, thenable, обработка ошибок

Поделиться
HTML-код
  • Опубликовано: 28 сен 2024
  • Примеры кода: github.com/How...
    Курс «100 лекций по программированию» habr.com/post/...
    #асинхронное #программирование #nodejs #javascript

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

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

    Спасибо огромное!!!! Наконец-то смог более-менее разобраться как "под копотом" себя ведут промисы и await.

  • @NicolayKrasotkin
    @NicolayKrasotkin 2 года назад +5

    Все круто! Небольшая придирка к произношению слова Promise, она так и читается -- "промис", а не "промайс". Это, видимо, какая-то распространенная недопонимание чтения слов, что заканчивается на "-ise", ведь многие слова с этим окончанием так и читаются, как "-айз": ентерпрайз, райз и т.д. Например, есть у меня есть пара знакомых, которые произносят слово Service как "сервайс"

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

    13:21 "Просто это жоподельная константа, я не знаю, чему она должна быть равна". Я понимаю, что именно там звучит, но... :)))

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

    Для чего нам вообще нужен асинхронный конструктор, где мы его можем применить вообще?

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

      Например логгер, соединение с базой, сетевой протокол, да что угодно, чтоб не делать отдельный метод инициализации

  • @ВладиславКучин-ф9м
    @ВладиславКучин-ф9м 4 года назад

    У вас в thenable (9 пример) не работают цепочные вызовы метода then. Я исправил, сделал пуллреквест

  • @Antonio-fm1sq
    @Antonio-fm1sq 2 года назад

    Спасибо!

  • @aysommer
    @aysommer 4 года назад +7

    Спасибо за лекции.

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

    Спасибо!
    фабрика пришествий улыбнула)

  • @Fodintsov
    @Fodintsov 3 года назад +1

    Мало. :( Не устаканивает знания. Надо еще что-нибудь почитать, посмотреть, порешать, да так, чтобы все эти переходы от асинхронщины к синхронщине и от async к промисам улеглись в голове. Ессно, я про себя только говорю. Наверное, пойду к Кантору, "Вы не знаете JS", Фланагану и на CodeWars. Тяжко дается эта тема почему-то.

  • @АскаровРуслан-л5м
    @АскаровРуслан-л5м 4 года назад +2

    Спасибо за объяснение таких сложных тем))

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

    1:00 "теперь появился" означает JS версии ES2017 и выше
    Я сидел, не вдуплял, почему мой TS код не отличает Function от AsyncFunction. Оказалось я запускал в target: ES2016

    • @TimurShemsedinov
      @TimurShemsedinov  26 дней назад +1

      Это не так, js отличал и раньше, но ts генерирует свои глючные полифилы, которые не только убивают производительность, но и изменяют поведение, предусмотренное спецификацией, а ts как известно, ни какой спецификации не имеет и может выдавать любую фигню на выходе

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

      @@TimurShemsedinov Да, действительно. Я сейчас посмотрел во что компилируется async в TS target: ES2016 и там, логично, полифилы, ведь async/await появились в ES2017, и в JS это вообще должна была быть синтаксическая ошибка, что-то я об этом сразу не подумал
      Но я немного не понял, что вы имели ввиду под "JS и раньше отличал"? До ES2017 же не было конструктора AsyncFunction и функции с промисами были(и остались) Function

  • @shramko-dev
    @shramko-dev 3 года назад +2

    Тимур, не смог нигде найти информации, может вы знаете?
    Насколько я знаю, JS выполняет все функции до завершения. Вопрос в том, что происходит с функцией когда внутри нее мы делаем await и промис еще не зарезолвися. Текущая функция пропадает из стека вызова? Ведь await не блокирует поток, следовательно мы должны эту функцию убрать из стека, но тогда другой вопрос, как мы возвращаемся в нее, когда промис (await) зарезолвился?
    await умеет сохранять stack trace и возвращается во время резолва в нужное место?

    • @shramko-dev
      @shramko-dev 3 года назад +1

      repl.it/@Shramkoweb/RadiantPreviousUtilities вот небольшая демка. Из нее видно, что во время await мы не блокирем выполнение, и дальше передаем управление другой ф-и синхронной, но как мы возвращаемся назад и что происходит в эти моменты в стеке, мне не ясно и не видел внятных обьяснений нигде.

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

      Промисы используют колбэки,ивентлуп и микротаски. эта вся машинерия работает так же как и вся асинхронщина, тут рассказывает чувак хорошо ruclips.net/video/8cV4ZvHXQL4/видео.html

    • @shramko-dev
      @shramko-dev 3 года назад +1

      @@TimurShemsedinov спасибо, это видео смотрел. Но нигде нет именно объяснения await, ведь только в нем мы выходим из функции, а потом возвращаемся в нее.
      В колбеках и промисах мы не восстанавливаем работу вызывающей функции.

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

      @@shramko-dev await это ожидание promise, а primise это абстракция над колбеком. Посмотри мои лекции по асинхронности

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

      @@shramko-dev вот эту ruclips.net/video/DXp__1VNIvI/видео.html

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

    Привет. Почему __proto__ - жлобство, а Object.getPrototypeOf() - прилично?

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

      Потому, что в стандарте __proto__ нет и реализация доступа к скрытому полю отдается на откуп среде запуска

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

      @@TimurShemsedinov В стандарте JS? Т.е. работает либо под Нодой, либо под браузером? Спасибо.

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

    привет. вопрос не по теме.
    6:17 "сплит, двоеточие и там асинхронную лямду".
    Если под лямбдой подразумевается стрелочная функция, то ее this не найдет split.
    const obj = {
    name: 'Marcus Aurelius',
    split: async (sep = ' ') => {
    return this.name.split(sep);
    }
    };
    (async () => {
    console.log('await obj.split() =', await obj.split());
    })(); // UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'split' of undefined
    Или что имеется в виду?

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

    Спасибо большое!