Все эти методы являются блокирующими и синхронными:
crypto.createHash()
hash.update()
hash.digest()
.toString()
Итак, ваш результат будет полностью синхронным. Вам совсем не обязательно использовать обратный вызов, чтобы сообщить результат. Вы можете просто вернуть результат напрямую:
exports.calculateSomeHash = function(somestring){
return crypto.createHash('md5').update(somestring).digest('hex').toString();
};
FYI, криптографическая библиотека имеет некоторые асинхронные методы, но это не те, которые являются асинхронными. 1026 * () когда-либо возвращать пустое (someha sh) значение, поскольку вычисление ha sh может быть не завершено полностью, как только будет запущен обратный вызов?
Нет. Они синхронны. У них нет проблем, связанных с синхронизацией.
Является ли этот алгоритм хеширования криптомодуля узла полностью асинхронным и неблокирующим?
Нет. Это синхронно и блокирующе. Имеет ли это значение для вас, возможно, зависит от размера данных.
Кажется, что встроенный модуль шифрования не имеет асинхронных опций ha sh, встроенных в node.js. Поскольку хеширование - это исключительно работа ЦП, единственный способ сделать их неблокирующими и асинхронными - это использовать собственные потоки в собственном коде, использовать WorkerThread или использовать child_process. Все эти параметры создают дополнительные накладные расходы, которые, вероятно, обычно не нужны. Но, если это действительно проблема для вас, вы могли бы развернуть WorkerThread, а затем отправить ему строку, которую вы хотели ha sh of, и он мог бы вернуть вам значение ha sh.
Вы можете посмотреть на модуль bcrypt , который имеет некоторое асинхронное хеширование, но это не совсем та же функциональность, поэтому вам нужно будет посмотреть, соответствует ли он вашим потребностям.