- Что такое "ад обратных вызовов" и как его избежать?
Причина ада обратных вызовов в том, что люди пытаются написать JavaScript таким образом, чтобы выполнение происходило визуально сверху вниз.
- Не вкладывать функции. Дайте им имена и разместите их на верхнем уровне вашей программы.
- Используйте поднятие функций в своих интересах, чтобы перемещать функции вниз
- Обрабатывайте каждую ошибку в каждом из ваших обратных вызовов. В этом вам поможет линтер типа стандартный.
- Создавайте многократно используемые функции и размещайте их в модуле, чтобы уменьшить когнитивную нагрузку, необходимую для понимания вашего кода. Подобное разделение кода на небольшие фрагменты также помогает обрабатывать ошибки, писать тесты, вынуждает вас создавать стабильный и документированный общедоступный API для вашего кода и помогает при рефакторинге.
Наиболее важным аспектом предотвращения ада обратных вызовов является удаление функций с пути, чтобы поток программ можно было легче понять без необходимости новичкам вникать во все детали функций, чтобы добраться до сути. что программа пытается сделать.
Использованная литература:
2. Что такое «заглушки» в Node.js?
Заглушки предоставляют готовые ответы на звонки, сделанные во время теста, обычно не отвечая ни на что, кроме того, что запрограммировано для теста. Шпионы — это заглушки, которые также записывают некоторую информацию в зависимости от того, как они были вызваны. Одной из форм этого может быть служба электронной почты, которая записывает, сколько сообщений было отправлено.
Чтобы включить его в рабочий процесс:
Заглушки
- Настройка — определите саму заглушку, какой объект в программе вы заглушаете и как
- Упражнение — запустите функцию, которую хотите протестировать.
- Проверить – проверить заготовку на наличие значений, которые прошли через нее, чтобы они соответствовали ожиданиям.
- Teardown — при необходимости очистить. например, заглушки времени обычно глобальны, вам нужно вернуть контроль
3. Что такое «потоки» в Node.JS?
Поток — это абстрактный интерфейс для работы с потоковыми данными в Node.js. Модуль stream
предоставляет API для реализации потокового интерфейса.
Node.js предоставляет множество потоковых объектов. Например, запрос к HTTP-серверу и process.stdout
являются экземплярами потока.
Потоки могут быть доступны для чтения, записи или и того, и другого. Все потоки являются экземплярами EventEmitter
.
Чтобы получить доступ к модулю stream
:
const stream = require('stream');
Модуль
stream
полезен для создания новых типов экземпляров потока. Обычно нет необходимости использовать модульstream
для потребления потоков.
Использованная литература:
4. Что вы подразумеваете под цепочкой в Node.JS?
Связывание методов, также известное как идиома именованных параметров, представляет собой распространенный синтаксис для вызова нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединять вызовы в цепочку в одном операторе, не требуя переменных для хранения промежуточных результатов.
5. Объясните, что такое «Консоль» в Node.JS?
Модуль console
предоставляет простую консоль отладки, похожую на механизм консоли JavaScript, предоставляемый веб-браузерами.
Модуль экспортирует два конкретных компонента:
- Класс
Console
с такими методами, какconsole.log()
,console.error()
иconsole.warn()
, которые можно использовать для записи в любой поток Node.js. - Глобальный экземпляр
console
настроен на запись вprocess.stdout
иprocess.stderr
. Глобальныйconsole
можно использовать без вызоваrequire('console')
.
Использованная литература:
6. Объясните коды выхода в Node.JS? Перечислите некоторые коды выхода?
Node.js обычно завершается с кодом состояния 0
, когда больше не ожидаются асинхронные операции. В других случаях используются следующие коды состояния:
1
Неустранимое фатальное исключение. Произошло неперехваченное исключение, которое не было обработано доменом или обработчиком события'uncaughtException'
.2
: не используется (зарезервировано Bash для встроенного неправильного использования)3
Внутренняя ошибка синтаксического анализа JavaScript. Исходный код JavaScript, встроенный в процесс начальной загрузки Node.js, вызвал ошибку синтаксического анализа. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.4
Внутренний сбой оценки JavaScript. Исходный код JavaScript, встроенный в процесс начальной загрузки Node.js, не смог вернуть значение функции при оценке. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.5
Фатальная ошибка. В версии 8 произошла фатальная неисправимая ошибка. Обычно сообщение печатается в stderr с префиксомFATAL ERROR
.6
Внутренний нефункциональный обработчик исключений: возникло неперехваченное исключение, но функция внутреннего обработчика неустранимых исключений была каким-то образом установлена на нефункцию и не могла быть вызвана.7
Сбой во время выполнения внутреннего обработчика исключений: возникло необработанное исключение, и функция внутреннего обработчика неустранимых исключений сама выдала ошибку при попытке его обработать. Это может произойти, например, если обработчик'uncaughtException'
илиdomain.on('error')
выдает ошибку.8
: Не используется. В предыдущих версиях Node.js код выхода 8 иногда указывал на неперехваченное исключение.9
Недопустимый аргумент: либо указан неизвестный параметр, либо параметр, требующий значения, был предоставлен без значения.10
Внутренний сбой во время выполнения JavaScript: внутренний исходный код JavaScript в процессе начальной загрузки Node.js вызвал ошибку при вызове функции начальной загрузки. Это случается крайне редко и обычно может происходить только во время разработки самого Node.js.12
Недопустимый аргумент отладки. Были установлены параметры--inspect
и/или--inspect-brk
, но выбранный номер порта недействителен или недоступен.>128
Выходы по сигналу. Если Node.js получает фатальный сигнал, напримерSIGKILL
илиSIGHUP
, код выхода будет равен128
плюс значение кода сигнала. Это стандартная практика POSIX, поскольку коды выхода определяются как 7-битные целые числа, а выходы сигнала устанавливают старший бит, а затем содержат значение кода сигнала. Например, сигналSIGABRT
имеет значение6
, поэтому ожидаемый код выхода будет128
+6
или134
.
Использованная литература:
7. В чем разница между кластерным и некластерным индексом?
- кластеризованный индекс определяет порядок, в котором данные физически хранятся в таблице. Табличные данные могут быть отсортированы единственным образом, поэтому для каждой таблицы может быть только один кластеризованный индекс. В SQL Server ограничение первичного ключа автоматически создает кластеризованный индекс для этого конкретного столбца.
- Некластеризованный индекс не сортирует физические данные внутри таблицы. Фактически некластеризованный индекс хранится в одном месте, а табличные данные — в другом. Это похоже на учебник, в котором содержание книги расположено в одном месте, а предметный указатель — в другом. Это позволяет использовать более одного некластеризованного индекса для каждой таблицы.
8. Что такое определяемая пользователем функция? Что такое все типы пользовательских функций?
- Определяемая пользователем функция – это запрограммированная процедура, параметры которой устанавливаются пользователем системы. Определяемые пользователем функции часто рассматриваются как ярлыки программирования, поскольку они определяют функции, которые выполняют определенные задачи в более крупной системе, такой как база данных или программа для работы с электронными таблицами.
- Может быть 4 разных типа пользовательских-определяемых функций, а именно: Функция без аргументов и без возвращаемого значения. Функция без аргументов и возвращаемого значения. Функция с аргументами и без возвращаемого значения. Функция с аргументами и возвращаемым значением.