Почему 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.

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