Вы смешиваете обратный вызов и async / await , которые являются двумя различными инструментами
используется для работы с асинхронными вызовами.
* асинхронная / ожидающая схема *
Здесь мы вызываем genSalt()
, который возвращает разрешенный вами объект Promise (дождитесь завершения операции) .
const hash = await bcrypt.genSalt(10);
* шаблон обратного вызова *
Здесь мы вызываем genSalt()
, который по завершении вызовет предоставленную функцию как обратный вызов.
bcrypt.genSalt(10, () => {
// Callback
});
Тезисы представляют собой два различных метода для обработки асинхронных функций.
Так работает следующий пример:
// async/await pattern
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(user.password, salt);
// callback pattern
function generate(callback) {
bcrypt.genSalt(10, (salt) => {
bcrypt.hash(user.password, salt, (hash) => {
callback(hash);
});
});
}
РЕДАКТИРОВАТЬ: Чтобы ответить «Первая или вторая версия лучше?»
У Javascript есть история. Каждый год составляется новая версия стандарта ECMA, например ECMA2015, ECMA2016, ECMA2017 ...
В vanilla js они были обратными вызовами , в ES5 они были обещаниями , в ES6 они были асинхронными / ожидающими .
async / await - будущее. Будь частью будущего!