Async.waterfall() прерывается при передаче обратного вызова в bcrypt.hash()

Я новичок в 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) Каков другой способ обработки ошибок, кроме обратных вызовов?

Вы пытались передать необходимые параметры функции обратного вызова? (ошибка, хэш), например. Кроме того, я не уверен, что здесь требуется асинхронное ожидание, поскольку вы уже находитесь в операции синхронизации (async.waterfall).

silencedogood 15.07.2019 18:40

@silencedogood (эээ, хэш) сработало! Спасибо. я использовал async/await, потому что я вызывал функцию обратного вызова (null, hash) вне обратного вызова bcrypt.hash(). Таким образом, вместо того, чтобы возвращать хеш-значение, метод 1 возвращал объект-обещание. Пожалуйста, опубликуйте свой ответ, чтобы я мог принять его.

Samarth Saxena 15.07.2019 21:27

Конечно! Рад, что это решило вашу проблему. Ответ опубликован. Я вижу вашу логику использования async/await. Я, возможно, пошел об этом по-другому, но я полагаю, что это работает!

silencedogood 17.07.2019 18:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Передача необходимых параметров функции обратного вызова bcrypt необходима, если вы планируете включить анонимную функцию в качестве параметра. Например:

const hash = await bcrypt.hash(password, 10, (err, hash) => {  // Added err, hash params.
                console.info("Hash Generated Successfully");
        });
return hash;

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