Мой фон

Javascript — не первый язык программирования, который я изучил, и я использовал его всего несколько раз, просто чтобы попробовать (хотя я ничего не создал с его помощью). Мой первый язык программирования — Java, и мне никогда не удавалось создать настоящий проект с использованием Javascript в студенческие годы. Итак, это мой опыт использования Javascript

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

Однажды мой друг предложил мне проект по созданию системы наставничества с использованием Node.js в качестве бэкенда. Я подумал, круто, может быть, я смогу узнать что-то новое, используя Node.js. Да, я узнал много новых интересных вещей, о которых раньше не знал, и немного разочаровывающих. Я поделюсь тем, что я узнал, используя Javascript в первый раз.

Круто, НПМ!

NPM — это сокращение от Диспетчер пакетов узла. Он позволяет вам устанавливать пакеты или библиотеки, созданные другими людьми по определенной причине, и использовать их в своем проекте. Например, вы хотели создать генератор случайных чисел, один из способов сделать это — самостоятельно создать функцию в файле или классе и просто использовать ее. ИЛИ вы можете просто использовать NPM, чтобы получить чужой пакет, импортировать его и просто использовать, и это очень легко сделать. Просто поместите это в свой CLI внутри вашего проекта

npm install number-generator

И БАМ! ваша новая библиотека установлена, и вы можете импортировать ее в свой проект куда угодно

Таким образом, NPM похож на Maven в Java или Composer в PHP, но в то время я никогда их не использовал (хотя и слышал об этом пару раз), а просто копировал и вставлял библиотеки в свой проект. Знание того, что есть такие вещи, действительно открывает мне глаза, потому что тогда я знаю, что вы можете легко устанавливать пакеты в свой проект.

Машинопись??

Итак, когда я работал над своим проектом, я обнаружил, что есть такая штука, как Typescript. Хорошо, тогда я подумал, что это не имеет ничего общего с Javascript, но я ошибался. Так что Typescript, на мой взгляд, является потомком Javascript, потому что он создан из Javascript. Typescript — это типизированный надмножество Javascript.

Итак, я привык к языкам программирования, которые должны объявлять свои переменные, используя такие типы, как Java, C, Pascal и т. д. Я также знаю, что есть языки программирования, которым это не нужно, например Javascript, Python и т. д. Итак. Я полностью готов к этому при входе в среду Javascript. Чего я не знаю, так это того, что существует множество расширений Javascript, и самым популярным сейчас является Typescript.

Итак, сначала я писал Javascript в своем проекте Node.js, но потом люди продолжали упоминать Typescript на разных форумах и в документации. Я подумал, что это за Typescript? Оказывается, Typescript — более аккуратная версия Javascript. Когда вы объявляете переменную, вы не просто используете ключевое слово «let», «var» или «const», вам также нужно указать тип переменной. Это строка, целое число, логическое значение и т. д. Вот почему они назвали его Typescript.

Хотя Node.js не полностью поддерживает ES6, Typescript использует ES6 и не компилируется в Node.js. Таким образом, чтобы скомпилировать его, нужно преобразовать его в ES5, используя такие пакеты, как Babel. И тогда преобразованный файл может быть прочитан Node.js. Чего я не видел при программировании на Java или C++.

ОБЕЩАНИЯ И ОБРАТНЫЙ АД

И последнее, но не менее важное: меня больше всего разочаровывают эти две функции. ОБЕЩАНИЯ и ОТЗЫВЫ. Большинство, если не все языки программирования, которые я пробовал, были синхронизированы, что означает, что функции, синтаксис и все остальное выполняется шаг за шагом. За исключением случаев, когда мы хотим, чтобы он работал асинхронно, мы используем потоки, и это совершенно другой процесс. С другой стороны, Javascript использует асинхронность с промисами и обратными вызовами, чтобы быстро вернуть все, что завершило обработку.

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

Например, вы хотите проверить, существовал ли пользователь в базе данных или нет, и обновить его имя, если оно существует. В этом случае вам нужно запустить 2 запроса, запрос на выборку, а затем запрос на обновление. Да, возможно, есть и другие способы сделать это только с одним запросом, но это всего лишь пример. Вот фрагмент кода, который я бы сделал, если бы не знал об обратных вызовах и промисах.

Я ожидал, что он зарегистрирует обновленный результат, но это привело к отсутствию данных. Почему? Из-за промисов (тех функций, которые имеют цепочку .then()). User.findOne() и User.update() являются промисами. Когда вы вызываете промисы, следующий за этим кодом является оператор if. не дожидаться завершения обещания, и поэтому переменная userData по-прежнему будет иметь значение события null, несмотря на то, что findResult возвращает пользовательские данные.

Так как же нам сделать так, чтобы это синхронизировалось? Ну, мы можем поместить обещание User.update() внутрь .then() из User.findOne() или… мы можем использовать асинхронный await (подробнее об этом в другой статье). Обратные вызовы — это первая версия промисов. Они имеют ту же функциональность, но в другом формате, и вы не можете использовать асинхронное ожидание для обратного вызова.

Итак, если мы выберем первый метод, который реализует обратный вызов или обещание внутри другого обратного вызова или обещания, кажется, что это лучшая практика, чтобы поступить правильно? Ну, пока вы не встретите знаменитый CALLBACK/PROMISE HELL

Обратный вызов внутри обратного вызова внутри обратного вызова, пока вы не создали пирамиду обратных вызовов. Это то, чему я научился на собственном горьком опыте, когда использовал Node.js. Я несколько дней думал о том, как я могу удалить эту вещь из своего кода, но не мог найти ответа. Поэтому я перестал использовать обратные вызовы и вместо этого использовал промисы. Потому что я могу использовать асинхронное ожидание для промисов. Если я натыкаюсь на обратный вызов, я сначала превращаю его в обещание, а затем использую его в своем коде, если он потенциально может создать ад обратных вызовов.

Вывод

Node.js — очень хороший инструмент, который можно использовать, если вы хотите создавать клиентские или серверные программы. Теперь я полностью занят программистом Node.js, хотя тогда я ненавидел его. Это очень мощный стек, который очень легко развернуть, если вы к нему привыкнете. В отличие от Java или PHP, где вам нужно предоставить серверы, такие как apache или nginx, для развертывания (а также установить модуль Java и PHP отдельно без xampp и т. д.), вы можете запустить Node.js, просто используя команду узла, и все будет работать автоматически.

Просто когда вы начнете, вы будете разочарованы некоторым синтаксисом и потоком программирования javascript, но как только вы к нему привыкнете, вы поймете, почему он используется во многих проектах, которые теперь используются в бэкэнде и внешнем интерфейсе (React, Vue, Angular). ).