Press "Enter" to skip to content

Using async generators to stream data in JavaScript


утром в этом видео мы собираемся
посмотрите, как вы можете использовать синхронный
генераторы для потока данных. Я думаю, что
синхронные генераторы являются одним из
самые крутые вещи, чтобы приземлиться в JavaScript и
Я думаю, что это имеет огромное значение для того, как
мы программируем, но также много
движущихся частей , поэтому я хочу , чтобы мы думали назад
как серия эпизодов, которые привели нас
здесь, если вы хотите посмотреть с самого начала
есть ссылка в эпизоде
описание в первом эпизоде ​​мы просто
посмотрел на концепцию итератора мы
говорили о том, как мы можем повторять что-либо
с такими вещами , как цикл for, потому что
они предоставляют итератор и Рэй
предоставляет итератор и аргументы
объект предоставляет итератор, и мы можем
также создайте наши собственные пользовательские объекты, которые
предоставить итератору, чтобы все могло
перебирать его
в эпизоде после этого мы посмотрели
генераторы который является способом для нас
создайте эти итераторы в более
синтаксически более сладкий, более
сами генераторы не похожи на некоторые
особая магическая концепция, в конце концов они
просто создайте итератор, чтобы мы не
нужны генераторы для создания итераторов мы
также могут делать это вручную, если мы хотим
затем в эпизоде ​​после этого мы поговорили
об синхронных итераторах и
синхронный итератор так же , как
нормальный итератор — это просто то, что он делает
с обещаниями, чтобы он мог пойти и как
каждый раз, когда вы вызываете дальше, он может получить
новый элемент по сети, но что я
в последнем эпизоде ​​не может быть
ясно объясните, почему и когда вы
хотите использовать синхронный итератор
потому что я продавал концепцию
итератора раньше, как вы знаете способ
сделать обычай, что вы можете
итерации, но в асинхронных итераторах
Например, я использовал поддельную базу данных, которая просто
достал пару строк и много
люди задавали в комментарии хорошо
и массив уже iterable это
уже работает в цикле for for up
петля
почему я не могу просто обещал вообще на
эти строки базы данных, а затем просто вернуть
обещание в течение этого ресурса для
массив, а затем перебрать этот
в чем смысл использования и
синхронизировать
Я думаю, что iterable я так рад этому
вопрос был задан Мне очень нравится, когда
люди ставят под сомнение новые технологии
и спрашивает, почему, почему это существует, почему
есть ли у нас это, какова цель
это и просто не использовать вещи
бессмысленно, поэтому в этом видео мы
собираюсь использовать пример , в котором является
массив будет как полностью
Структура данных невозможно использовать так что
массив, вроде как коробка или как
долгое время можно представить себе это как набор
ящики, которые склеены из ограниченных
длины на некоторых языковых языках
ограниченная длина на некоторых языках, которыми вы
может просто приклеить новые ящики сверху
но, но это похоже на ящик и
то вы помещаете вещи в массив внутри
из этих маленьких коробок, и они там
ограничение массива состоит в том, что вы
либо получить все или ничего, если у вас есть
API какой-либо базы данных или какой-то файл
читатель или что-то еще, и вы просто звоните
читайте файл, и это как-то дает вам
массив, что означает, что все строки
должны быть прочитаны
вы получаете все сразу, что может
хорошо, что это очень простой способ
рассуждая о файле, который я только что прочитал
я получаю розу, я читаю
пользователи таблицы я получаю все пользователи теперь я
есть пользователи, с которыми я могу перебирать их
отлично, я имею в виду, что это потрясающе .
просто почему бы не всегда использовать массив
Представьте, что массив действительно большой
что вы имеете в виду, вы имеете в виду
сто тысяч строк, потому что это
ничего в массив , как это не является
переносится очень быстро даже над
мобильное соединение и, как и даже ячейка
телефон может обрабатывать один 100 000 строк в
массив очень легко, как компьютеры
действительно могущественные даже малые да
это правда
компьютеры очень быстры, и они
просто все быстрее и быстрее , все
времени, но одна вещь, которая растет даже
быстрее, чем скорость и производительность
компьютеры — это наборы данных, которые мы
должны обращаться, поэтому я хочу, чтобы вы подумали
для этого, когда мы думаем об асинхронном
Генераторы Мне нужно, чтобы вы подумали
как небольшие наборы данных, такие как 100 000
100 000 строк, потому что это не
большой, я хочу, чтобы вы подумали о 30 гигабайтах I
хотите , чтобы вы думали 100 гигабайтов вещи
которые не могут поместиться в память, вы не можете
прочитайте все это сразу, даже в
в обозримом будущем, и даже когда мы получим
компьютерам со 100 гигабайтами
RAM , то мы будем иметь наборы данных
которые составляют всего несколько терабайт
данных и даже, как набор данных, может даже
быть в черной логике бесконечной и в этом
Я буду использовать то, что я
может ли набор данных, о котором я могу думать
ближайшего к бесконечности, и это
все фотографии кошек в мире все
котята, и именно здесь
Понятие потока приходит в это
то , что мы просили, как
очень небольшая часть данных, которые мы просили
начало, как мы просили начать
веревки, а затем мы просто начинаем тянуть
веревка мы не просим за весь
веревку сразу, так что интересная часть
о понятии итератора, который
снова помните, что это всего лишь объект
что мы можем попросить следующий пункт
постоянно заключается в том, что он может выражать
массив, потому что массив — это просто
работает в этом интерфейсе , пока мы
есть все в памяти, это работает просто
применить интерфейс для запроса
Следующее , что для следующей вещи для
следующая вещь, но NS итератор может
также можно использовать для выражения потока, который мы просто
постоянно просите следующее, но
под капотом у него действительно нет
все, что он еще просил
как вы идете, и это сила
потока, и мы можем использовать итератор
выразить это или выразить, что
возможно , неправильно меня положить его в
поток может соответствовать итератору
протокол, поэтому я думаю, что итераторы
в основном способ выразить нам
потоки и цель потоков
что мы можем иметь дело с вещами, поскольку они
приходите так, чтобы это могло быть действительно огромным
наборов данных или просто наборов данных, которые похожи на
пара мегабайт, но вы хотите
показать их постепенно в интерфейсе
так что пользователю не нужно ждать
давайте посмотрим на какой-то код в порядке
так что это наблюдаемая возрастная очередь.
вроде как игровая площадка JavaScript
это здорово, я использую это
много для прототипирования, что вы видите здесь
поток всех кошек на Flickr, который
это фото сервис , который был огромным обратно в
день, но потом Yahoo купил его и
разрушен, но все еще неправильно, и это
имеет действительно хороший API для кошения
такие вещи вы видите здесь, что мы
имеют свою сиесту для петли веса, которая
мы посмотрели в последнем эпизоде, и это
для каждого графа кошек
он просто выводит HTML, который является этим
это всего лишь тег изображения
действительно, и тогда мы видим здесь, что каждый
время мы
болезнь, то наблюдаемое ее замещение
подумайте об этом как о простом блоке
здесь как и в основном на раковине
генератор — это и функция синхронизации
и генератор, чтобы он имел возможность
обоих ожидает и плодоношения это
супер супер мощный сущность действительно, но
не трать слишком много времени на понимание
эта линия, которая не очень важна
для этого видео, как мы могли бы просто
это могло быть просто так, как вы знаете
как бы сделать так, как будто это
а не цель этого видео
Интересно, что это за черт
это кошка, где это где
я собираюсь показать вам, что
кошки выглядят, но я хочу подчеркнуть здесь
что я не показываю вам ничего нового, как в
пример редактора синхронизации, который мы видели
точно все движущиеся части, которые
мы увидим здесь, но пример
будет выглядеть немного более устрашающе
потому что он использует реальную службу API
и есть немного более подвижные
части и осложнения, связанные с этим
но это в основном как API-интерфейс Fetch и
асинхронные генераторы, которые вы собираетесь
посмотреть, как смотреть на кошек здесь
это просто создает эти звонки мерцания
Поиск тегов
котята или вроде бы держит поиск метки мерцания
с со струнами кошек все в порядке
отлично, мы рушаемся, и мы смотрим
как выглядит поиск метки фликера
похоже, мне нужно уменьшить шрифт
немного там, мы открываем это и
мы видим здесь, что это большой
функции, давайте посмотрим на эту вещь сначала
поиск метки мерцания, это не имеет ничего общего с
делать с их итераторами это
просто возвращаемая функция возвращает
обещание, которое разрешает массив
ссылки на изображения, представляющие страницу
результаты поиска тега на flickr wow
вот про глоток теперь он это
просто вызывая API Flickr для поиска
мы даем ему тег, но мы также даем ему
потому что в основном это
результат набора кошек, это всего лишь миллионы
и, возможно, миллионы католиков
миллиарды, поэтому мы не можем получить все это на
в то же время мы должны предоставить ему страницу и
каждая страница — 100 кошек, поэтому вы видите здесь
мы просто вызываем выборку, где вы знаете некоторые
Граф здесь, который определен в Flickr
API, а затем мы разбираем Jason
мы знаем, что Джейсон выглядит так
у нас есть эта странная структура, на которой мы фотографируем
массив, а затем для каждой фотографии мы
извлеките мы построим изображение Эрл
это так, как на компакт-диске на ваших глазах
на Flickr построены так, что это
дает нам небольшой кусок
огромный результат поиска, который является
кошки на interweb о хорошо на Flickr
это так близко , как мы собираемся получить давайте
прокрутите немного вниз , чтобы добраться до
мясо самого итератора или
итерабельны, что мы видим здесь кошек
функция, которая является тегом Flickr
поиск и возвращает тег, который он возвращает
объект, который имеет только один метод, который
называется символом dot итератором синхронизации, поэтому
это довольно фанки, это метод, который
использует этот символ как свое имя, если только
CAPTCHA, но более точное имя для этого
будет фабрикой синхронизации итератора или
sync iterator maker, так как это
это создает и раковину предателя, так что
снова это то, что цикл for
звоните под капот и хорошо, когда он
начинает цикл, чтобы называть это
чтобы получить итератор и посмотреть
что здесь происходит, видно, что он устанавливает
добавьте пару переменных здесь, чтобы сохранить
трек страницы в диксоне и фото
индекс, потому что он будет итерировать
эти вещи он также устанавливает кеш
по кочану
это не этот итератор, это не происходит
чтобы получить одну фотографию за раз, потому что я
было бы очень расточительно , так как на пути
веб- работает, что есть латентность
для каждого запроса, поэтому мы хотим быть
доставляя запросы немного
Я не сто фотографий, что кажется
разумно просто получить сто
в то время, хотя мы не можем получить все
в мире за один раз, но получая один
в то время это было бы немного слишком
мало, но итератор, который мы хотим
мы не будем раскрывать это как один элемент
за один раз, поэтому мы собираемся создать
кэш под капотом и
буфера, и это то, что для кеша
и у нас есть этот небольшой заполненный кеш
здесь используется функция helper
поиск фликер-тегов для любого тега мы
при условии , а затем он собирается взять
фотографии здесь и просто запихнуть его в
кэш-переменной они переменные, поэтому
это настройка итератора , затем
возвращает возврату итератор здесь
и итератор имеет следующую функцию
что, где происходит волшебство и
следующая функция будет увеличивать
фото индекс будет минус один
с самого начала, но потом он
не блокируйте Cheeta, чтобы мы были на
0 пойдем посмотреть, есть ли улов
и если есть кеш, если это существует
в кеше в этом случае он не собирается
чтобы быть таким, чтобы оно опускалось здесь, тогда
сбрасывает индекс фотографии на 0, а затем
увеличивает индекс страницы в этом случае
индекс страницы равен нулю, и это означает
что мы закончим на первой странице
которая является первой страницей в и
Результаты поиска Flickr начинаются с начала
один не равен нулю
он называет фил наличными, где индекс страницы
и затем он задерживается здесь на два
секунд я делаю это, как эта задержка
существует для демонстрационных целей в
этот случай, потому что иначе это будет просто
blaze Ruby эти изображения в очень
раздражающим образом функция задержки
просто функция, которая в основном
обертка для заданного таймаута, которая только делает
это обещание основано просто возвращает обещание
который разрешается через секунды, поэтому это
задержка здесь, это просто обещание, что
разрешается через две секунды после этого
решил, что мы возвращаем итерацию
объект мы не сделали, потому что откровенно
мы никогда не будем делать итерации
котята это в значительной степени бесконечное
Результирующий набор , а затем значение будет
чтобы быть наличными на индекс фотографии, поэтому
наличные деньги — это в основном текущая страница, которая
мы загрузили так, что мы получили нашу первую
cat загружает первую страницу, и это дает
нас следующий первый кот, когда мы вызываем
следующий или для всех вызовов bloop next
в следующий раз он ударит по этому
и он увидит, что если
это деньги, и он увидит, что
там также есть, как есть
cat в индекс фотографии, который равен нулю
но это вторая кошка в
результат индекса фото , так что это будет
просто сделайте эту искусственную задержку, а затем
он вернется ,
одетый кот, потому что снова помните, что
первые 100 кошек кэшируются, затем
просто перебирает это для 100 кошек и
то он ударит по этой линии, это
увидим, что этот кеш будет
видеть, что эй
это мы теперь из кошек и кошки
нам нужно будет увеличивать и
на следующую страницу и поймать , что один так
затем он спускается здесь, сбрасывает фотографию
индекс, потому что мы вернулись и начали
и затем он увеличивает страницу, а затем
он заполняет кошку этой страницей, а затем
мы снова итерации на следующей странице
и тогда вы просто продолжаете так
снова ничто из этого не является новым
вы видели все это в предыдущем
видео, разница в том, что это использует
реальный API, а не как поддельный API, который
Я создал, чтобы проиллюстрировать точку там
это более подвижные части, и это
просто более сложный пример для этого
но нет новых
и это то, что
весь наш пример, и все они
приводит к этому постоянному потоку кошек
в этом примере мы создали
итератором вручную, но мы также можем использовать
генераторы для создания итераторов, и мы
посмотрели, что мы посмотрели на
как создавать синхронные итераторы
с использованием синхронных генераторов, но сегодня
мы собираемся реорганизовать это вручную
ручная синхронизация редко, и мы
собирается создать это с помощью синхронизации
генератор, и он
ум, насколько изящнее это становится так
позвольте мне развернуть поиск тега Flickr здесь и
Я собираюсь написать переписать этого педераста
как генератор, поэтому я
собираюсь прокомментировать это и захватить это
и ваша функция просто нормальная
функции просто начинают с начала
мы начнем с нашего проекта, и мы
собирается вызвать поиск тега Flickr
и мы хотим захватить этот тег здесь.
будут кошками, а второй аргумент
для поиска Flickr
назовите это индекс страницы, эта переменная не
существуют еще давайте создадим, что на самом деле пусть
индексная страница мы , что это синхронная
он возвращает это, он превращается в обещание, поскольку мы
могут видеть здесь, поэтому мы хотим, хотим, чтобы мы
волна, что это вес и для того, чтобы
используйте ключевое слово ожидания, которое нам нужно сделать
эта функция, я думаю, белый, о мой бог
Я жалуюсь на это
извините за это
теперь, когда у нас есть этот массив, мы хотим
перебирать его
поэтому давайте сделаем это для Const Earl или этого
результаты, которые мы ждем, мы собираемся сделать
вещи выглядят на самом деле, мы нарушаем это
потому что это может смутить нас
мы просто позвоним этому массиву
это даст нам массив, так что
мы ждем здесь, это будет
фактический массив страницы или, возможно, как
возможно, данные страницы, это хорошо
имя так, как только у нас есть некоторые данные страницы и
мы итерации над этим хотим
разве ты не лечишь там, это игра
помните, как это работает генератор
так это то , как мы получаем
следующий следующий пункт или хотите, как когда
нас просят что-то вроде о, я хочу
следующий пункт, то мы подводим его вверх
и затем мы останавливаем генератор, потому что
генератор является своего рода возможным
и тогда мы не продолжим, как
генератор не будет продолжаться до тех пор, пока
внешний мир — внешний потребитель
звонит дальше, когда мы закончим с
этот цикл, как мы докажем, будет иметь место при
все на странице в данных страницы один раз
у нас нет данных на странице, которую мы идем на странице
индекс
просто увеличивайте то, что я делаю H и X
плюс один, а затем тогда это
генератор собирается кончить, что мы не
хочу, чтобы мы хотели просто
продолжайте, поэтому я собираюсь обернуть это в
в то время как
истины мы склонны видеть в этих генераторах
это довольно ванильный узор
для генераторов и да, вот так
это похоже на то, что теперь это просто
собираюсь продолжить, да, это просто будет
продолжить, на самом деле нет конца
условие здесь, как гипотетически, мы
может закончиться страницы, но это не
случится
в этом случае приложений, таких как кошки
бесконечно, и я сейчас написал
вся кровавая вещь
посмотрим на это да, я вижу, как
немного кода, это сравнивается с этим I
На самом деле, мне нужно уменьшить шрифт
чтобы показать эти бок о бок, чтобы это
это то же самое, что и мы не добавили
задержка здесь, но это единственное
разница просто потрясающая
код , который мы можем избавиться от от нас имея
возможность генератора довольно
штопка охладиться это на самом деле убедиться , что
это работает, позвольте мне запустить этот бог моего бога
ключевое слово выход заслуживает который
Конечно, конечно, конечно.
жаль, что мы не можем использовать доходность
потому что эта функция здесь не является
генератора, мы должны сделать это
генератор в противном случае мы не позволили
использовать поле так, чтобы матка
теперь это генератор, давайте просто запустим это
снова и сейчас вы видите здесь, что о
есть много кошек, и это своего рода
нервными и прочее становится действительно
путают, и это потому, что у нас нет
добавлена искусственная небольшая задержка, которая
был на последнем, как здесь, так
Я собираюсь добавить, что не ты и это здесь
позвольте мне фактически увеличить размер шрифта
снова, чтобы мобильные пользователи могли на самом деле
увидеть что-нибудь
ждать задержки или запустить ее снова и
теперь вы видите, что слышите, что хм теперь
погрузка кошек и как это приятно
последовательный способ лучше прокрутить вниз и
просто посмотрите, насколько это
это так здорово, и это я.
надеюсь , что я связан этот ноутбук в
так что вы можете разветвить его и
играть с ним вокруг себя , это очень
важно использовать эти вещи
для того , чтобы понять их , вы не можете
просто смотри, как я это делаю, это слишком много
движущихся частей и вещей, которые вам просто нужно
экспериментировать с ними по своему усмотрению в в
чтобы полностью понять их, что
не застревают на собственной путаницы
ожидаем, и ваш товарищ
программисты полезны, если у вас есть
вопрос отвечал в комментариях вниз
ниже или если вы хотите поддержать шоу
немного и стать покровителем, который вы получаете
доступ к форуму Fun Fun, который
также удивительное место, чтобы попросить о помощи
как я часто там встречаюсь, и
люди дружелюбны и так
приятно и очень хорошо объяснять
вещи , поэтому убедитесь , что вы используете , что если вы
есть покровитель, так много круто
последствия с асинхронными генераторами
мы будем изучать их в
будущие эпизоды
потому что если вы не любите сделали
связь, но вы можете заметить
что теперь это потоки, встроенные в
JavaScript у нас теперь есть этот удивительный
синтаксис для выражения потоков в стандартном
таким образом, это эффективно делает четыре
основных итераторов и
генераторы эффективно делают то, что мне нравится
местные обещания сделали, как у нас
они любят бит до родного
обещания, встроенные в JavaScript,
библиотеки, такие как кия и Blue Bird, но теперь
у нас есть такой стандартный способ делать
потоки , что означает , что мы можем иметь
библиотеки, которые работают с этими потоками
и мы можем смешивать и сопоставлять, что только
удивительно, что мы не должны использовать эту моральную
библиотеки потоков эффектов, такие как Highland или
бекон
наш бывший, мы можем просто использовать этот встроенный
вещи, а затем просто выберите немного
библиотеки, которые преобразуются и просто
используйте собственные функции, а затем
эти вещи будут полезны для всех
проектов, поскольку все они имеют дело с
асинхронные интервалы, которые поражают
поэтому я думаю, что в зависимости от того, что
вопросы, которые у нас есть, мы могли бы сделать
более высокий порядок, я думаю, что это правило в следующий раз
как и другие функции
интервалы от итераций, например, для
интервалы или как мы можем жить как
фильтровать кошек или что-то не могу
знаете, что вы только что просмотрели эпизод
fun fun function Обычно я пытаюсь сделать
они немного короче , чем этот
но нам нужно было потратить много времени на
почему, а также показать пример реального мира
на обоих из них требуется время, которое я производю
это шоу каждое утро в понедельник Oh 800
GMT, поэтому настройтесь на следующую неделю, но вы
забыть, что вы можете нажать кнопку подписаться
так что вы не пропустите его
или если вы чувствуете себя взволнованным, вы можете просто
смотреть другой эпизод прямо сейчас я mpj
до следующего утра понедельника остаются любопытными
Please follow and like us:

Be First to Comment

Добавить комментарий