Урок 8. JavaScript. Как работает Async, Await. Работа с сервером c fetch

Поделиться
HTML-код
  • Опубликовано: 5 июл 2019
  • Эксклюзивный контент на моем Boosty: boosty.to/vladilen
    Telegram: t.me/js_by_vladilen
    Instagram: / vladilen.minin
    Roadmap по каналу:
    vladilen.notion.site/Roadmap-...
    Урок 8. JavaScript. Как работает Async, Await. Работа с сервером c fetch
    В ролике я расскажу о том, как работают операторы async await в Javascript на примере работы с сервером с методом fetch
    Вы узнаете как применять async await и как обрабатывать ошибки, если они есть
    Сложный JavaScript простым языком:
    • Урок 1. JavaScript. Чт...

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

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

    Эксклюзивный контент на моем Boosty: boosty.to/vladilen

  • @mgm_smile
    @mgm_smile 4 года назад +123

    Как всегда все четко и по теме. Владилен ты делаешь огромный вклад в развитие ру комьюнити, спасибо тебе =)

    • @VladilenMinin
      @VladilenMinin  4 года назад +12

      Благодарю за отзыв)

  • @tyortyo
    @tyortyo 4 года назад +27

    Офигенное объяснение. Здорово, что приведено сравнение с промисами, тогда все понятно становится! Супер

  • @Vlad-em1bx
    @Vlad-em1bx 4 года назад +16

    Это лучший материал по JS на русскоязычном youtube.
    Отдельно хотелось бы поблагодарить Вас Владилен за курс по Vue. Он превосходен. Он помог мне довольно быстро вникнуть во Vue.
    Посоветовал его одному коллеге верстальщику, он также остался им очень доволен.
    Спасибо Вам огромное! :)))

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

    Большущее спасибо :) Без таких знаний асинхронность не хило выносит мозг)))

  • @Wraith2401
    @Wraith2401 4 года назад +28

    на мой взгляд самое доступное объяснение работы async/await в рунете. лайк/подписка

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

    Отличное видео - аккуратное объяснение важных истин простым языком.

  • @Abdul-hy4cy
    @Abdul-hy4cy 2 года назад

    Как ты круто объясняешь! Последовательно, по уровню сложности.

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

    Владилен, спасибо. Благодаря твоему каналу время карантина вследствие чертового коронавируса проходит как нельзя плодотворно.

  • @unknownWakeborder
    @unknownWakeborder 3 года назад +6

    Я в свое время так намучался с получение данных с апи.... а тут было все так доступно. Очень полезно, спасибо тебе за контент!

  • @uracan7872
    @uracan7872 4 года назад +10

    Спасибо за видео! Proxy теперь нужен)

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

    огромное спасибо за видео!!! такого понятного и простого объяснения async/await я еще не встречал. очень классные и понятные видео

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

      Благодарю за отзыв, рад такому результату)

  • @damir-n1
    @damir-n1 2 года назад

    Спасибо Вам большое, Владилен. Очень доступно.

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

    Пожалуй, самое понятное объяснение. Спасибо.

  • @user-ml8hn5kg9e
    @user-ml8hn5kg9e 2 года назад

    Спасибо за урок очень мощьный курс по JavaScript

  • @s.konstantin
    @s.konstantin 4 года назад +1

    Спасибо! Как всегда все понятно.
    Красавчик!

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

    Спасибо тебе Владилен за твои видосы.

  • @user-uo8jd7ys2x
    @user-uo8jd7ys2x Год назад

    Очень подробно разжевал!спасибо огромное за труд

  • @user-tg9wd2hm1g
    @user-tg9wd2hm1g 4 года назад +5

    Благодарю Вас Владилен! С Вами очень интересно изучать JavaScript!)

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

      Согласен, у других смотрел так и не понял что такое promise, async and await, методы массивов, которые новые map и тд, а тут все сразу стало понятно, и операторы rest и spread туда же, столько полезных вещей которыми я раньше не пользовался, жаль конечно))

  • @user-wj9jo6wc6c
    @user-wj9jo6wc6c 2 года назад

    Блин, ты крут, человек! Учился по твоему ангуляр курсу, теперь вот доучиваю в ютубе. Супер!

  • @user-kg6fz5tz2b
    @user-kg6fz5tz2b 4 года назад +5

    Спасибо, Добрый Человек!!!

  • @radikovichkz2470
    @radikovichkz2470 3 года назад +9

    Владилен вы не поверите: но во время создания промиса вместо setTimeout(()=>r(),ms) можно просто записать setTimeout(r,ms); r - это есть resolve, и мы передаём ссылку на функцию в качестве колбека

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

    Спасибо! Переписывал store для авторизации из урока по Vue CRM, там была готовая библиотека firebase, а мне надо было через API реализовывать. Это видео очень выручило!

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

    Конструктивно и максимально доходчиво.

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

    Владилен, спасибо за урок!

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

    Отлично обяснил, понятно и без лишних слов

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

    Владилен ты не представляешь как ты мне помог этим уроком!!!!

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

    спасибо за ролик! очень полезная информация

  • @nikdanik
    @nikdanik 4 года назад +77

    Про веб воркеры было бы супер! Классный видос, лайк

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

      про sharedArrayBuffer семафоры мютексы и атомарные операции.

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

      Твоя мечта сбылась

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

      ещё вебсокеты каеф

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

    Спасибо за урок!

  • @user-un2wj8ee9s
    @user-un2wj8ee9s 4 года назад +2

    Очень круто обьясняешь. Коротко и по делу!)) Pozdrawiam z Polski!!!

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

    Я что-то поняла, неужели, офигеть! но боюсь что окажется, что рано радуюсь, что все-таки не поняла, потому что я не могу поверить, что я наконец это поняла. Спасибо Вам

  • @Vlad-jp3co
    @Vlad-jp3co Год назад +5

    Твои уроки раскрывают суть каждой концепции. Ты описываешь проблему и механизм в языке, который эту проблему решает. Информация так усваивается намного лучше. В других уроках описывают некоторые факты о части языка и не говорят как это использовать и новичок не понимает как он это может применить. Спасибо большое за труд

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

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

  • @user-yx4ov2xx8s
    @user-yx4ov2xx8s 4 года назад +2

    Супер видео! Спасибо вам! Плейлист тоже классный!

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

    Влад, ты красавчик! Спасибо тебе за науку! Вкладываешь знания в наши бестолковые головы.

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

      Не думаю, что они бестолковые, иначе как бы они нашли мой канал:)
      Шучу конечно, но за отзыв спасибо

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

    Классно объяснил, браво! Спасибо!

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

    спасибо за такое прекрасное обьяснение!!!

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

    Спасибо, все очень доступно!!!

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

    "Фетчить некоторые туду", буду теперь это говорить когда меня спрашивают чем я занимаюсь

  • @user-gu5ir3zs4v
    @user-gu5ir3zs4v 4 года назад +2

    Это чертовски полезно

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

    Спасибо большое за видосы красавчик!

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

    Your teaching is very good. Thank you

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

    Спасибо большое! От души!!!

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

    Владилен топ! Если у тебя будет своя школа, я пойду туда учиться :D

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

    Спасибо за видео!

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

    Обожаю тебя!!!

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

    Красава Вледилен!

  • @user-om5co3nd8u
    @user-om5co3nd8u 2 года назад

    Люблю такие видосы. Где не льют 50 минут теорию со слайдами на своем птичьем наречии, а за 14 минут на практике показывают как, да чё. Спасибо автору!

  • @27sosite73
    @27sosite73 2 года назад

    ska, ты топ, Владилен
    спасиобо

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

    Спасибо! Лучший)

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

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

  • @user-dc7ot2lm1m
    @user-dc7ot2lm1m 4 года назад +1

    Спасибо, но это уже тяжеловато было понять) Усугубилось всё стрелочными функциями

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

    Спасибо за видео :)

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

    Круто, спасибо!

  • @sexy.big.monkey
    @sexy.big.monkey 4 года назад +2

    Опа новый видосик! 😋

  • @nikishiro8278
    @nikishiro8278 4 года назад +8

    Спасибо. Про Webpack круто было бы послушать :)

    • @VladilenMinin
      @VladilenMinin  4 года назад +5

      Думаю сделаю быстрый курс по нему)

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

    Владилен! Спасибо за ваши уроки. Я часто смотрю ваши уроки на iPhone. Нельзя ли поменять черный бэкграунд на белый, чтобы лучше был виден код? Спасибо!

  • @user-dk4ji5eb6g
    @user-dk4ji5eb6g 4 года назад

    Спасибо большое за видео) Очень доступно и понятно!!!
    Владилен, вы не могли бы снять видео про pwa во vue-cli3? Или оно уже есть, а я не нашла на канале?

  • @Fxgleb
    @Fxgleb 4 года назад +11

    Посмотрев этот ролик я прям осознал что такое асинхронность в жс и в чем разница между then и await (наконец таки)

  • @user-od6hi8we5p
    @user-od6hi8we5p Год назад +4

    Все-таки Promise и async/await одна из самых сложных тем в JS. Но после таких уроков все становится сразу понятно

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

    Спасибо, урок действительно полезный. Впрочем, как всегда)

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

    Круто 👍

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

    Самое главное, что смотря на async await может показаться, что мы только ждём код и всё. НО, как и then, await не блокирует код, а просто откладывает выполнение действующей функции (или call stack если смотреть глобальнее) и продолжит выполнять код дальше
    Такой код выведет 3 1 4 2. Если уже поставить await верхнего уровня перед вызовом функции, то уже будет 3 1 2 4, так как мы уже дожидаемся этой функции и по сути смысла в асинхронности тогда нет. Код внутри промиса выполняется синхронно, поэтому туда реально нужно ложить то, чего вы хотите подождать типа запроса или того же setTimeout
    ```JavaScript
    async function f() {
    console.log("1")
    let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("готово!"), 1000)
    });
    let result = await promise; // будет ждать, пока промис не выполнится (*)
    console.log("2")
    alert(result); // "готово!"
    }
    console.log("3")
    f();
    console.log("4")
    ```

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

    Спасибо!

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

    thank you again )

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

    хороший урок

  • @user-qw9uo4wo5p
    @user-qw9uo4wo5p 2 года назад

    Благодарю!!

  • @null-lu8it
    @null-lu8it Год назад

    Любишь ты все темы усложнять

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

    Спасибо большое за отличное объяснение! Не совсем понял момент с
    .then(() => {
    return fetch(url)
    }
    .then(response => response.json())
    fetch() возвращает Promise, then() оборачивает все что в return в новый Promise. Получается, что результат then() - Promise? Как тогда последующий then() вызывает у этого объекта json() ?

  • @user-gu5ir3zs4v
    @user-gu5ir3zs4v 4 года назад +6

    Теперь уж точно прям очень нужен прокси

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

    попробовал заменить в своем микропроекте .then на async/await и получилось даже еще более громоздко, может чуть читается легче, так и мне никто не мешает .then переносить на новую строку.

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

    Спасибо

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

    спасибо

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

    красиво шпарит.
    на двойной скорости послушал. всо чотко

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

    Усложнил все до невозможности. Не знаю насчёт остального, но это видео было максимально сложным для новичка

    • @user-su6gu3me1r
      @user-su6gu3me1r 2 года назад

      я чувствую себя максимально тупым последние несколько уроков

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

    async/await это синтаксический сахар на генератор/промис, где генератор используется для превращения асинхронного кода в синхронный, а промис для выполнения асинхронного кода. То есть тут суть в генераторе, а промис деталь реализации генератора. Промис можно заменить на простой обратный вызов (callback).

  • @talas12341
    @talas12341 4 года назад +106

    всегда так - смотришь, всё понятно, начинаешь делать, ну нихуя не понятно‼ пока собственными ручками не сделаешь, хрен поймешь‼

    • @user-xd5td7px9t
      @user-xd5td7px9t 4 года назад

      Это всегда так ! )

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

      сначала смотришь, потом делаешь, потом еще раз смотришь, благо youtube иногда подкидывает уже просмотренные ролики

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

      я помню когда делал все через then только, понимал что это крутая штука что позволяет дождатся асинхронной функции, словить результат и далее его обрабатывать. ну как асинк и авейт. про промисы вобще не шарил думал промис = асинхронному методу. типа так называют в яваскрипте просто так ХД)

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

      И это он еще не самый понятливый объяснятель)

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

      @@yaroslavzef7267 а кто самый понятливый?

  • @yasenclassen
    @yasenclassen 3 года назад +8

    10:15 зачем писать await repsonse.json() если мы уже ждем fetch который запишет результат в переменную response после того как отработает, по идее await для repsonse.json() уже не нужен, или я не прав? @Владилен Минин

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

      без .json() ты не получишь тело ответа

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

    Малюсенький вопрос: я правильно понимаю, что работа всей страницы при наличии такого кода останавливается до того момента, пока не выполнится "виртуальный промис" в виде таймера delay? Или это просто отдельный поток где js выполняет для конкретной функции свой код и затем возвращает его? Ну, то есть, если мы присвоим переменной эту функцию, к ней можно будет обратиться только через 2 секунды, и всё это время скрипт будет недоступен?

  • @user-pe8kt3ze1i
    @user-pe8kt3ze1i Год назад

    Подскажите, а зачем второй раз прописывать await? Там же вроде как уже синхронно можно response в json перевести

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

    а как это можно применить в цикле? К примеру при прохождении массива циклом, если данные подходят по условиям, нужно выполнить еще две функции которые делают fetch запросы и нужно чтобы была асинхронность, чтобы сперва выполнилась getFirstData() потом getSecondData() и цикл корректно отрабатывал

  • @user-fn6og3sq3n
    @user-fn6og3sq3n 4 года назад

    А будет ролик про работу с DOM?

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

    Спасибо) т.е. предпочтительнее пользоваться async / await, чем промисами напрямую. Или есть ситуации, когда async / await не получится использовать?

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

      Я бы почти всегда их использовал, редко когда нужны именно промисы
      Но стоит помнить, что еще не все бразуеры нативно поддерживают подобный синтаксис и лучше пропускать его через babel

  • @Nikita-hr6ss
    @Nikita-hr6ss 4 года назад +1

    А как быть когда надо делать fetch запросы в цикле? Условно в коде который описал ниже, там где console.log хочу ещё помимо синхронно выполнить fetch запрос. Или вообще можно как-то более правильно чисто async await-ами всё переписать?
    let count = 0;
    function printer()
    {
    return new Promise(resolve => {
    setTimeout(()=>{
    resolve(console.log('+2 sec...'))
    }, 2000)
    });
    }
    (async _ => {
    console.log('Start')
    while (count

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

    Добрый день, подскажите как дальше работать с data ? Или только внутри промиса и больше никак не вывести data в глобальную зону видимости?

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

    А почему стоит await на response.json() , это ведь уже синхронная операция? И можно ли делать return в async методах?

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

      Метод json() возвращает промис.

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

    а про axios есть что-нибудь у тебя? не могу найти

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

    Помню как мучался с созданием небольшого API на NodeJS с использованием пакетов MySQL, fs и http(s), где нужно было просто вернуть файл, перед этим найдя его в БД. Вот там меня и выбесил mysql пакет со своим коллбэком и необходимостью передавать в него request из пакета http, чтобы вернуть пользователю данные. Благо в пакете mysql2 был предусмотрен синхронный метод 😅

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

    Доброго времени суток Владилен!
    Если у вас будет время, подскажите пожалуйста что такое нативная функция? Также нативность ?

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

      Встроенная в сам язык

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

    спас меня

  • @user-pq7dj1ny4h
    @user-pq7dj1ny4h 4 года назад

    Спасибо, Владилен! Хорошо рассказываешь. Можешь сделать видео про Webassembly?У дотнэтчиков скоро выходит инструмент Blazor, как замена JS фреймворкам, да и в целом языку JS. Front - end они смогут писать на C#. Получится некий полноценный фулстэк из одного языка. Но насколько мне известно, им всё же придётся использовать JS для некоторых операций. Microsoft планирует в своих браузерах полностью заменить JS на webassembly (C#). Каково твоё мнение и что стоит ждать?

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

      Пока я не очень знаком с этой темой, только слышал про нее
      На текущий момент хочу сосредоточиться на JS - уж больно много материала хочу осветить
      А дальше посмотрю, на что переходить

    • @user-pq7dj1ny4h
      @user-pq7dj1ny4h 4 года назад

      @@VladilenMinin Тогда жду курсы или уроки про React Native и Electron.

  • @user-in3jd6cm2t
    @user-in3jd6cm2t 2 года назад +1

    🤯👍

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

    Set & Map Weak Map, примеры использования следующее пожалуйста)

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

      Быть может отдельный плейлист по ES6?

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

      Владилен Минин, было круто, если сделали бы

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

    ToJson тоже возвращает promise?

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

    Отличное видео, спасибо. Владилен, когда будут ваши авторские курсы на Udemy? :)

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

      Привет, в июле будет первый курс)

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

      @@NextgenSocialReptile Отлично! )

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

    Спасибо. А подскажите как сделать, что бы асинхронная функция ретернила полученные данные, а не возвращала просим.

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

      Функция с меткой async всегда будет возвращать промис.

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

      Вы можете, так сказать, распаковывать возвращаемый промис в другой функции через await. Проблема в том, что новая функция тоже должна быть async.

  • @user-gu5ir3zs4v
    @user-gu5ir3zs4v 4 года назад

    Так же хорошая идея на счёт парсера на node js , на Ютубе нормальных видео нет вообще, а в статьях говорят только как спарсить в самой ноде а как это уже на свою html страницу вывести нет. Тут как раз и fetch будет нужен, потому что нужно будет как то делать запрос на сервер что бы получить эти данные

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

      NodeJS на сервере, там не будет fetch
      Скорее какой нибудь request

    • @user-gu5ir3zs4v
      @user-gu5ir3zs4v 4 года назад

      @@VladilenMinin ну если допустим есть парсер на ноде и он выводит текст только в терминале, то что бы его переместить себе в html нужно поднять сервер и сделать к нему запрос(тем же fetch) ,так ведь? Нода же не имеет доступ к дому, поэтому только так. И вот такого описания парсера с нуля и до момента вывода себе в html нету вообще нигде, ни в одном русском источнике

    • @user-qs8vf5dm3c
      @user-qs8vf5dm3c 4 года назад

      @@user-gu5ir3zs4v Все, что вы спарсите, кроме картинок, надо закидывать в базу. А дальше все работает как обычный сайт.

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

    Пишу из 2021, вроде посмотрел внимательно урок по Promise и первый пример функции меня "убил наповал". Полез разбираться, что чего и как и в итоге, что получилось, для тех кто так же не понял как я:
    const delay = (ms) => new Promise((r) => setTimeout(r, ms));
    Во первых это короче и даже понятнее. Итак что у нас происходит, пишу как все еще ученик:
    присваиваем переменной ссылку на безымянную стрелочную функцию с параметром ms
    она в свою очередь возвращает Promise, который возвращает по исполнении функцию setTimeout через ms миллисекунд.

  • @user-to8bv5yr5p
    @user-to8bv5yr5p 4 года назад

    Видосы огонь, Владилен, спасибо за работу)) Но не въехал зачем нужна задержка в 2сек.

    • @user-qs8vf5dm3c
      @user-qs8vf5dm3c 4 года назад

      Для наглядности. В реальных проектах никакие задержки не нужны.