Одна из основных техник, необходимых для создания вещей на JavaScript, — это возможность легкого преобразования между функциями, использующими обратные вызовы, и функциями, возвращающими промисы.

Обратный звонок ➡ Обещание

Обещание ➡ Обратный звонок

Бонус: NodeJS util.promisify и util.callbackify

При преобразовании между стилем обратного вызова и промисами в NodeJS есть пара удобных инструментов, специально созданных для этой цели. Следует отметить, что сигнатура функции обратного вызова (error, data)

Какой из них лучше?

В зависимости от того, что делает ваш код более понятным.

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

Исходно из: