Когда я создал свой окончательный проект для школы Flatiron, я понял, насколько мне нравится программировать на серверной части. Я глубоко изучил Ruby и даже провел пару недель, просто решая задачи с Leetcode, чтобы узнать еще больше тонкостей языка. Как и хотел Матс, я был очень доволен программированием на Ruby!

Я надеюсь, что Ruby поможет каждому программисту в мире быть продуктивным, получать удовольствие от программирования и быть счастливым. Это основная цель языка Ruby. —Мац о Ruby 1.9, Google TechTalks 2008

Пока я писал код, я понял, что не сделал основательного обзора одной очень важной темы из Фазы 1 в школе Flatiron: асинхронный код! Не поймите меня неправильно, мне также нравилось программировать во внешнем интерфейсе, хотя когда я сталкивался с проблемами, связанными с состоянием в React, мне приходилось останавливаться и чесать в затылке…

Я мог бы поклясться, что набрал номер… почему я не могу понять, почему это не обновляется…? Я схожу с ума!?

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

Блоки синхронного кода относятся к коду, который выполняется одна строка за другой, например…

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

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

Пример назначения классной комнаты

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

Одним из вариантов может быть то, что вы раздаете рабочие листы и говорите ученикам, чтобы они передавали их вам стопкой, когда они все сделают. Вы должны оценивать их, так что это звучит разумно, верно?

Но что, если вы хотите пробежаться после окончания школы или пойти поужинать с друзьями? Это отбросит вас на час назад, пока вы будете сидеть в классе и ждать, пока все ученики закончат! Нет, так не пойдет.

Вы раздаете задания со следующими инструкциями: по мере того, как каждый учащийся заканчивает каждый рабочий лист в своем темпе, сдайте его, чтобы вы могли оценить его один за другим. Таким образом, вы можете оценивать рабочие листы по алгебре по мере того, как время, проведенное в классе, и вы можете пойти на пробежку (или перекусить) сразу после урока! Это основа асинхронного кода!

Использование запросов на выборку

Вот пример запроса на выборку из моего проекта фазы 5 для школы Flatiron (полностью общедоступный на моем Github!).

Давайте разобьем это на соответствующие части.

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

Во-первых, мы делаем вызов «fetch()» и пишем URL-адрес источника данных для аргумента. Затем это возвращает объект, для которого мы вызываем метод json(), который возвращает Promise (давайте пока не будем сосредотачиваться на объекте Promise). Вы должны использовать метод json(), чтобы использовать данные на следующем шаге, используя вызов метода then().

Метод then() принимает объект, который мы только что получили от первого вызова (часто называемый «данными»), и использует условную логику, чтобы решить, какая функция обратного вызова выполняется!

В этом случае, если объект данных не содержит ошибок, я вызываю функцию handleEditItem для обновления этого элемента! Если в ответных данных естьошибки, я устанавливаю для ошибок (вызов setErrors) значение «data.errors»!

Это немедленно асинхронно из-за запроса на выборку, при вызове которого следующие связанные .then’ы готовятся к работе! Как только обещание от выборки возвращается, остальные функции уже загружены и готовы к запуску!

Заключительные мысли

Я надеюсь, что это краткое руководство представляет собой простой пример, объясняющий ценность асинхронного кода! Если бы не асинхронность, приложения могли бы работать бесконечно долго или просто прерываться, если что-то вроде запроса fetch() не работает! Кроме того, если вы занимаетесь бэкенд-разработкой, не стоит недооценивать и сложность фронтенда!