Почему тогда обещание не передается следующему? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь определить, является ли роль admin в моем приложении суперпользователем или нет, с помощью этого кода:

AdminServices. js

var isSuper_User = function(email) {
  models.admin.findOne({ where: { email } }).then(function(admin) {
    logger.debug("Fetching user with email: ", email);
    logger.debug("admin.role: ", admin.role);
    isSuper_User = admin.role === 'super_user' ? true : false;
    logger.debug("isSuper_User: ", isSuper_User);
    new Promise(function(resolve, reject) {
      resolve(isSuper_User)
    })
  }).catch(err=> 
    logger.debug(err.toString())
    );
};

admin_routes. js

router.get("/isSuperUser/:email", function(req, res) {
  logger.debug("req.params.email: ", req.params.email);


 adminService.isSuper_User(req.params.email).then(isSuper_User => {
    logger.info("isSuper_User returned from promise: ", isSuper_User);
  });

});

logger - это модуль, который позволяет настроить регистрацию в терминале.
Однако, когда я отправляю запрос по электронной почте, для пользователя с ролью администратора код регистратора внутри admin_routes ничего не регистрирует. Все внутри AdminServices работает отлично.
Это то, что я получаю в терминале:
enter image description here
Так что проблема в том, как я обработал обещание. Но я не вижу, что именно сделал неправильно.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020

Функция isSuper_User ничего не возвращает.

Функция должна возвращать promise

var isSuper_User = function(email) {
  return models.admin.findOne({ where: { email } }).then(function(admin) {
    logger.debug("Fetching user with email: ", email);
    logger.debug("admin.role: ", admin.role);
    isSuper_User = admin.role === 'super_user';
    //admin.role === 'super_user' already returns true or false so no need of ternary.
    logger.debug("isSuper_User: ", isSuper_User);
    return isSuper_User;
    //No need of promise wrapper here.
  }).catch(err=> 
    logger.debug(err.toString())
    );
};
2 голосов
/ 05 февраля 2020

Вы должны вернуть обещание из функции. В данном коде вы ничего не возвращаете, что равно undefined.

var isSuper_User = function(email) {
  return models.admin
    .findOne({ where: { email } })
    .then(function(admin) {
      logger.debug("Fetching user with email: ", email);
      logger.debug("admin.role: ", admin.role);
      isSuper_User = admin.role === "super_user" ? true : false;
      logger.debug("isSuper_User: ", isSuper_User);
      return isSuper_User;
    })
    .catch(err => {
      logger.debug(err.toString());
      throw err;
    });
};


0 голосов
/ 05 февраля 2020

Функция isSuper_User не имеет оператора return.

Она не возвращает обещание, она возвращает undefined.

Вам необходимо явно вернуть обещание.

return models.admin.findOne....
...