Я новичок в Javascript. Я только что начал работать с npm, node.js и т. д.
Я нашел два популярных пакета: mkdirp и шарик.
которые обеспечивают некоторые очень простые и полезные функции. В своей базовой версии и mkdirp, и glob позволяют пользователю предоставлять пользовательскую функцию при вызове. И я нашел репо, в котором используются как mkdirp, так и glob для определения каскада вложенных вызовов функций примерно в следующих строках:
mkdirp('some_path', (err) => { // first nesting
if (!err) {
glob(
'some_glob_exp',
(err, files) => { // another nesting
if (!err) {
// transform file
files.map(do_something);
};
};
);
};
})
Мой вопрос:
Какой смысл предоставлять эту функциональность в mkdirp и glob и использовать ее, когда я мог бы обойтись без нее (т.е. создать каталог, затем создать объект файлов, затем манипулировать файлами в объекте файлов) и, возможно, написать более читаемый код? Является ли хорошей практикой вложение функций, подобных приведенным выше? Является ли основной мотивацией для этого парадигма функционального программирования? обработка ошибок? эффективность? избегая явного создания объектов?
Спасибо за ваш ответ. Вы рекомендуете в этом случае удалить вопрос? Если вы можете порекомендовать какую-либо общую / широкую литературу по этому поводу, пожалуйста, дайте мне знать!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обычно это делается для повышения эффективности. Термин здесь - асинхронный ввод-вывод. Идея состоит в том, что поток может работать над другими вещами, пока операция ввода / вывода не будет завершена, и вернуться к вашему обратному вызову позже.
Это вложение действительно немного некрасиво, поэтому были введены async / await / promises.
Вы можете взглянуть на MDN - у них действительно хорошее описание того, как использовать await.
Это хороший ответ. Мне не было известно об асинхронной природе многих функций и функций Javascript, предоставляемых пакетами npm. В моем конкретном примере были зависимости между блоками кода: сначала создайте каталог, затем создайте файлы в этом каталоге и т.д., и очень важно выполнять их последовательно (синхронно), но я все еще нахожу использование обратных вызовов и, как следствие, ад обратного вызова в приведенном выше фрагменте кода не идеален, ищем альтернативы, чтобы сделать код лучше.
Существует долгая история функций, которые принимают обратные вызовы к другим функциям. В вашем вопросе много общих вопросов, на которые вряд ли можно дать однозначный ответ. Обратите внимание, что
mkdirpиglob, скорее всего, асинхронны, поэтому вы не можете просто «создать каталог, а затем создать объект файлов», поскольку вы не узнаете, когда создание каталога будет завершено.