Асинхронность на промисах, Promise, all, then, catch, race

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

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

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

    Тимур, моё почтение, спасибо =) Продолжаем Асинхронный курс =)

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

    Спасибо за лаконичность и доступность изложения! Подписался.

    • @ТатьянаЧех-ч3к
      @ТатьянаЧех-ч3к 2 года назад

      Какая лаконичность ?? Вы наверное не видели "лаконичных" видео

  • @СеменБеленко-о9д
    @СеменБеленко-о9д 5 лет назад +7

    Спасибо большое вам за такие лекции! Cижу, как одержимый, наслаждаюсь полным погружением. Материал качественный. Отличная практика после статей на learn javascript. Кому то очень повезло иметь такого преподавателя. У нас же в вузе все вертится вокруг продуктов Microsoft и языка программирования C#.

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

      C# же хороший язык да и net core кроссплатформа давным давно

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

      Семен Беленко и правильно, что вертится вокруг C#. Как мне кажется, это более адекватный язык, абстрагируясь от того, что он разработан в недрах корпорации зла. Уж в качестве первого языка он подходит куда лучше чем JS. C# - это по-моему единственное, что MS сделали хорошего. Ну и Visual Studio Community, конечно. Реабилитируются после всех подстав с IE, когда они подложили свинью всем разработчикам и надо было всегда думать, а будет ли это работать в IE или нет, что-то дописывать конкретно под IE. Хреново, что JS в свое время стал практически монополистом во фронтенде и приходится его изучать. C# в разы приятнее.

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

      @@phat80 ты такие вещи на этом канале не пиши)
      А вообще с 2015 - года JS уже стал более - менее юзабельным языком. Могло быть и хуже

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

      @@phat80 По мне так вообще несправедливо сравнивать скриптовой язык и компилируемый. JS и C# не одного и того же поля ягоды. И JS гораздо круче в общем плане. Не потому, что я считаю его лучше С# как язык программирования. А потому что слово "круто" включает в себя многие факторы и конкурентноспособность и способность выходить на новые рынки в том числе. JS сейчас перетягивает практики архитектуры и написания кода из C# и становится лучше.

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

      @@maksimsergeevich5939 ну это просто смешно, вот так однозначно заявлять, что JS лучше ))) вообще сам JS - это ничто без интерпретатора и от качества его написания. Так что получается круче всех до сих пор C++, за счет чего и JS сейчас быстрый и эффективный.

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

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

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

    Спасибо за лекцию! Заметил что если после catch хотим продолжить цепочку then-catch то нужно и из catch возвращать промис. А то на следующий then не попадёт не каких аргументов (Конечно это актуально в тех случаях если в catch не бросаете ошибку (throw error))

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

      Из catch и из then не нужно возвращать промис, нужно возвращать значение, тогда оно упаковывается в промис и идет по цепочке, если из catch или then вернуть промис, то двойной упаковки в промис не случится (промис в промис не положится), но делать это специально не нужно, возвращайте просто значение.

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

      @@TimurShemsedinov Аа ну да, catch тоже возвращает промис. Так что не нужно в блоке catch создавать лишний промис. Спасибо за то что исправили и за идею ☺️

  • @dmitrijponkin
    @dmitrijponkin 6 лет назад +2

    Круто!!! Спасибо:))

  • @никитаантипов-у6л

    Вы просто преподаватель и профессионал с больших букв П

  • @VasTracer
    @VasTracer 5 лет назад +15

    Про Promise.race вы ошиблись, это примерно на 35:05 про reject, Вы говорите "Если все три вернуться с ошибкой то ..." а вот нет, вся суть в том что в catch мы попадем сразу как только любой из промисов вызовет reject. точно также как и в then попадем как только любой вызовет resolve, т.е. это типа "кто первый встал того и тапки" независимо от того reject или resolve

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

      Да, согласен, сейчас исправлю видео, че-то я заговорился

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

    32:12 А когда начинает промис исполняться? Не в момент создания? Разве не должны на момент начала исполнения Promise.all уже улететь все http-запросы?
    Upd: Проверил. Улетают. Кстати, в 8-all.js в 5 строке ошибка: если не убрать прямой слэш в конце урла, то на все запросы, кроме корневого, server.js будет выдавать ошибку 404, т.к. роуты person и city будут резолвиться в //person и //city. PR сделаю. В 9-all.js это можно использовать для демонстрации .catch().

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

    Спасибо!

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

    Скажите Тимур, можно ссылку на лекцию о создании серверов, про которую вы говорили в видео?

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

      Я не помню про что я говорил 4 года назад, но возможно, про ruclips.net/video/-az912XBCu8/видео.html

  • @sergeisychov9810
    @sergeisychov9810 4 месяца назад

    А стоит ли отменять те запросы, которые не доходят до promise.race()??
    Чтобы не грузить сервер, например, лишним процессом?

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

    Интересно спустя 4 года промисы в ноде по скорости очень близко подошли к колбекам ?

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

      Ускорились, но в 3-4 раза медленнее, это не принципиально, потому, что все асинхронные операции используются вместе с вводом-выводом, он занимает минимум в 10000 раз больше времени, так что скорость работы контракта в этом растворяется

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

    Тимур спасибо и за эту лекцию! Не первый раз ее смотрю кстати уже. Периодически пересматриваю многие ваши видосы по темам в которых у меня возникают вопросы. И снова очередной вопрос у меня =) :
    Если функция асинхронная, она возвращает промис в любом случае если что-то возвращает. Но я видел примеры где внутри асинхронной функции return new Promise(). В этом случае не получается масло масляное? Я понимаю, возможно таким образом хотели получить методы resolve и reject, но ведь в этом случае мы можем использовать await, try, catch. Так есть ли смысл внутри асинхронной функции писать return new Promise() ? Я так и не понял пока что.

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

      В этом случае промис в промис не оборачивается, т.е. 2 раза await писать не придется, зачем так делают - нужно смотреть код, возможно, там цепочка .then.then.then... уже внутри функции и распаковывать ее через await нет смысла, ее так и возвращают, а может просто лишний код, это часто случается.

  • @itslen
    @itslen 10 месяцев назад

    а що краще використовувати на хай-лоад проектах, Promise.race чи async.race? Де буде кращий перформанс? З одної сторони async.race написаний на колбеках, а з іншої це 3-party бібліотека. Чи є щось подібне у metasync ?

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

      Promise краще, зараз він вже має багато оптимізацій, але неможна ставити питання так. Спосіб написання асинхронності не повинен впливати на продуктивність сервера, майже усе навантаження бере I/O, а колбеки та проміси це майже невідчутно

    • @itslen
      @itslen 10 месяцев назад

      @@TimurShemsedinov зрозумів 👍 дуже дякую

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

    2:30 Забавно, что у setTimeout параметр таймаута - необязательный. Но нигде не написано, чему он будет равен, если не указать. Ни в МДН, ни в спецификации HTML. Нет, интуитивно-то я понимаю, что должен быть 0. Но с таким же успехом и 1 может быть. :)

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

    А почему не сказано за разницу второго аргумента then c catch? Это не абсолютно идентично, в React советуют не использовать catch в промисе в useEffect, а вторым аргументом в then обрабатывать ошибки. Какая у них разница?

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

      Порядок обработки разный, второй аргумент .then раньше получает ошибку, чем .catch, но если ошибка произойдет в одной из функций, которые переданы в .then, то дальше ее уже в .catch можно схватить

  • @ericraudy
    @ericraudy 5 лет назад +4

    какая IDE?

  • @Doox911
    @Doox911 5 лет назад

    Не вижу особой выгоды от обёртке - promisify

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

      Такая же выгода, как от паттерна адаптер, это преобразование контрокта, например, когда есть зависимость на колбеках и мы не можем ее переписать

    • @Doox911
      @Doox911 5 лет назад +1

      @@TimurShemsedinov А что такое контракт?

  • @ТатьянаЧех-ч3к
    @ТатьянаЧех-ч3к 2 года назад

    Ничего не понятно

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

    По Promise.all() и Promise.race() не до конца понял почему в первом случае callback содержит респонз всех запросов, а во втором случае только первого.
    Это потому что в первом случае после каждого запроса они собираются в коллекцию и только после этого выполняется resolve()? А во втором он сразу же выполняется на первом успешном запросе?

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

    Спасибо!