Функция возвращает ожидаемое обещание вместо результата
Я хочу использовать эту функцию, чтобы проверить, авторизован ли пользователь для доступа к ресурсу:
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
..