Зачем предоставлять аргумент для пользовательских функций и использовать его в модулях Javascript / NPM?

Я новичок в 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 и использовать ее, когда я мог бы обойтись без нее (т.е. создать каталог, затем создать объект файлов, затем манипулировать файлами в объекте файлов) и, возможно, написать более читаемый код? Является ли хорошей практикой вложение функций, подобных приведенным выше? Является ли основной мотивацией для этого парадигма функционального программирования? обработка ошибок? эффективность? избегая явного создания объектов?

Существует долгая история функций, которые принимают обратные вызовы к другим функциям. В вашем вопросе много общих вопросов, на которые вряд ли можно дать однозначный ответ. Обратите внимание, что mkdirp и glob, скорее всего, асинхронны, поэтому вы не можете просто «создать каталог, а затем создать объект файлов», поскольку вы не узнаете, когда создание каталога будет завершено.

Heretic Monkey 03.09.2018 19:14

Спасибо за ваш ответ. Вы рекомендуете в этом случае удалить вопрос? Если вы можете порекомендовать какую-либо общую / широкую литературу по этому поводу, пожалуйста, дайте мне знать!

mbpaulus 03.09.2018 20:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Это вложение действительно немного некрасиво, поэтому были введены async / await / promises.

Вы можете взглянуть на MDN - у них действительно хорошее описание того, как использовать await.

Это хороший ответ. Мне не было известно об асинхронной природе многих функций и функций Javascript, предоставляемых пакетами npm. В моем конкретном примере были зависимости между блоками кода: сначала создайте каталог, затем создайте файлы в этом каталоге и т.д., и очень важно выполнять их последовательно (синхронно), но я все еще нахожу использование обратных вызовов и, как следствие, ад обратного вызова в приведенном выше фрагменте кода не идеален, ищем альтернативы, чтобы сделать код лучше.

mbpaulus 04.09.2018 21:52

Другие вопросы по теме