Я новичок в async/await и настроил базовый сервер node.js, который обрабатывает данные формы для регистрации пользователя. Ниже мой код
async.waterfall([async function(callback){ //Method 1
const hash = await bcrypt.hash(password, 10/*, () => { //breakpoint
console.info("Hash Generated Successfully");
}*/);
return hash;
}, function(hash, callback){ //Method 2
console.info(`The value of passed arg is: ${hash}`);
callback(null, 'success');
}], function(err, result){
if (err){
throw err
}
else {
console.info(result);
}
});
В Method 1
, если я не предоставлю обратный вызов bcrypt.hash()
, код работает правильно, и значение хэша печатается. Однако, если я предоставлю обратный вызов, я получу этот вывод:
The value of passed arg is: undefined
.
Итак, у меня есть два вопроса здесь.
1) Почему async.waterfall()
прерывается при обратном вызове bcrypt.hash()
?
2) Каков другой способ обработки ошибок, кроме обратных вызовов?
@silencedogood (эээ, хэш) сработало! Спасибо. я использовал async/await, потому что я вызывал функцию обратного вызова (null, hash) вне обратного вызова bcrypt.hash(). Таким образом, вместо того, чтобы возвращать хеш-значение, метод 1 возвращал объект-обещание. Пожалуйста, опубликуйте свой ответ, чтобы я мог принять его.
Конечно! Рад, что это решило вашу проблему. Ответ опубликован. Я вижу вашу логику использования async/await. Я, возможно, пошел об этом по-другому, но я полагаю, что это работает!
Передача необходимых параметров функции обратного вызова bcrypt необходима, если вы планируете включить анонимную функцию в качестве параметра. Например:
const hash = await bcrypt.hash(password, 10, (err, hash) => { // Added err, hash params.
console.info("Hash Generated Successfully");
});
return hash;
Вы пытались передать необходимые параметры функции обратного вызова? (ошибка, хэш), например. Кроме того, я не уверен, что здесь требуется асинхронное ожидание, поскольку вы уже находитесь в операции синхронизации (async.waterfall).