Функция UserLogged в Node.js возвращает значение undefined. Почему? [закрыто]

Когда я дохожу до конца приведенного ниже кода, он всегда возвращает "undefined", и я не знаю почему!

function UserLogged (session) {
  if (session === null) {
    var err = new Error('Not logged in');
    err.status = 400;
    return {user : null, err : err};
  }
  User.findById(session.userId)
  .exec(function (error, user) {
    if (error) {
      return {user : null, err : error};
    }
    else {
      if (user === null) {
        var err = new Error('Not authorized!');
        err.status = 400;
        return {user : null, err : err};
      }
      else {
        console.log("User found and ok!");
        return {user : user, err : null};
      }
    }
  });
}

Журнал "Пользователь найден, и все в порядке!" на консоли, но по-прежнему возвращает "undefined"

0
задан 14 June 2018 в 15:01

1 ответ

Похоже, что Вы пытаетесь возвратить что-то из функции обратного вызова. JavaScript в основном работает асинхронно на i/o операции. Функция, объявленная в .exec() функция обратного вызова здесь.

Я нашел эту ссылку полезной для понимания асинхронного кодирования. https://blog.risingstack.com/node-hero-async-programming-in-node-js/

Вы могли изменить свой код, подобный этому, чтобы заставить его работать

function UserLogged (session, callback) {
  if (session === null) {
    var err = new Error('Not logged in');
    err.status = 400;
    return callback(err);
  }
  User.findById(session.userId)
  .exec(function (error, user) {
    if (error) {
      return callback(error);
    }
    else {
      if (user === null) {
        var err = new Error('Not authorized!');
        err.status = 400;
        return callback(err);
      } else {
        console.log("User found and ok!");
        callback(null, user);
      }
    }
  });
}

Аргументом обратного вызова должна быть функция, подобная этому

UserLogged(session, function(err, user) {
  console.log(err);
  console.log(user);
})

Передача "допускает ошибку", поскольку первым аргументом в пользу функции обратного вызова является nodejs стандарт.

Надеюсь, что это помогло Вам :D

1
ответ дан 29 October 2019 в 02:57

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

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