Функция возвращает ожидаемое обещание вместо результата

Я хочу использовать эту функцию, чтобы проверить, авторизован ли пользователь для доступа к ресурсу:

const Authorisation = require('../models/Authorisation');

const isAuthorized = async (role, employee, objectId) => {
  const myAuth = await Authorisation.find({ employee: employee.id })
    .populate('auth')
    .then(auth => {
      return auth
        .filter(authItem => role.includes(authItem.auth.name))
        .filter(
          authItem =>
            authItem.organisationtype[0].item.toString() === objectId.toString()
        );
    })
    .catch(err => {
      return err;
    });

  return myAuth;
};
module.exports = isAuthorized;

Если я использую console.log(myAuth) внутри функции непосредственно перед ее возвратом я получаю результат, но когда я вызываю функцию, я получаю ожидающее обещание вместо результата.

Что я упустил?

1 ответ

isAuthorized сама по себе является асинхронной функцией и всегда возвращает обещание. Так что если вы позвоните isAuthorized, нужно дождаться разрешения результата:

var auth = await isAuthorized()

Или же

isAuthorized().then( auth => ... })

Как только одна часть кода возвращает данные в асинхронном режиме, все остальное, что зависит от него, также должно быть асинхронным. Неважно, если это Promise/async, callbacks..

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