Почему make-promises-safe используется только "в программном коде верхнего уровня"
В make-promises-safe
пакет изменяет поведение Node.js по умолчанию в отношении ошибок, возникающих в обещаниях. Обычно в Node эти необработанные отклонения обещаний регистрируются, но программа продолжает работать. С участием
make-promises-safe
установлен, Node.js выйдет, когда обнаружит необработанное отклонение обещания. "Безопасный" здесь означает, что ваша программа не будет иметь секретных необработанных отклонений, поскольку необработанные отклонения часто совпадают с ресурсами, которые не были должным образом очищены, и эти неочищенные ресурсы могут вызвать проблемы в длительно выполняющейся программе.
Все это я понимаю. Однако этот модуль поставляется с предупреждением
Важно, чтобы этот модуль использовался только в программном коде верхнего уровня, а не в модулях многократного использования!
Цель этого предупреждения неясна. Почему авторы модуля советуют людям не использовать этот модуль в своих собственных модулях многократного использования?
1 ответ
Я думаю, что предупреждение действительно могло бы содержать некоторые дополнительные пояснения, хотя бы для того, чтобы прояснить использование слегка сбивающих с толку терминов
reusable modules
и
top-level program code
Вот.
Когда я прочитал предупреждение, мне показалось, что оно предостерегает от использования его в пакетах / модулях, которые вы публикуете в
npm
. Когда импортирует пользователь пакет NPM (который может быть совершенно не связан с обработкой ошибок), в котором вы требуемойmake-promises-safe
пакет, это неявно налагает механизм обработки ошибок, о котором пользователь может не знать. Вы, конечно, можете добавить это в свой файл README, но не все читают их полностью.
Как вы уже обсуждали в разделе комментариев своего вопроса, исходный код показывает, что он подписывается на
unhandledRejection
событие, но даже если он не может быть чистым, чтобы требоватьmake-promises-safe
несколько раз, как это объявлено, кеширование модуля действительно должно предотвращать выполнение привязки более одного раза. Так что я бы не стал считать это проблемой. С другой стороны, если каждый модуль начал требовать
make-promises-safe
конечно, на мероприятие будет несколько подписок.
Итак, вывод. Я бы только потребовал
make-promises-safe
во входном файле вашего приложения узла (например, app.js/server.js, где ваш регистр создает / настраивает ваш http-сервер для веб-приложения узла), таким образом, код вы можете контролировать как разработчик. Я бы не потребовал его ни в каком модуле узла (будь то локально или публично на
npm
) и оставьте на усмотрение пользователя, который реализует ваш пакет, как обрабатывать ошибки в приложении HIS.