@ber_enot
Веб-разработчик, Vue.js / Node.js

Как возвратить значение из коллбеков или завершить внешнюю функцию?

Привет.

Пытаюсь разобраться в Node.js, для этого пишу серверное приложение - Web API.
В обработчиках запросов сейчас встречается такая конструкция:
create(req, res, next) {
        crypt('PASSWORD').hash(function(err, hash) {
            if (err) {
                next("ERROR!");
                // ! Здесь нужно завершить дальнейшее выполнение ф-ии create()
            }
            
            var newUser = new users.User();
            
            newUser.save(function (err) {
                if (err) {
                    next("ERROR!");
                    // ! Здесь нужно завершить дальнейшее выполнение ф-ии create()
                } else {
                    res.send("User has been saved!");
                }
            })
        });
    },

Вижу следующие проблемы:
1. Необходимо завершить функцию create из колбеков (см. комментарии в коде), как это сделать - не понимаю.
2. Слишком большой уровень вложенности. Как его можно уменьшить?

Хотелось бы видеть что-нибудь в этом роде:
create(req, res, next) {
   var _hash = '';
   crypt('psw').hash(hash => {
      if (hash) {
         _hash = hash;
      }
   }
   users.User().save(err => {
      // Do something..
   }
}


Про замыкания и асинхронную работу читал, но код правильно организовать не получается.
Прошу вашей помощи. Спасибо.
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@emp1re
create(req, res, next) {
        crypt('PASSWORD').hash((err, hash) => {
           if (err)  return next(err);
           new User().save((err) => {
                if (err) return next(err);
                res.send("User has been saved!");
            })
        });
    },

else тебе тоже не нужно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы