我想使用此函数检查用户是否被授权访问资源:
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)
,则会得到结果,但当调用函数时,会得到一个挂起的承诺,而不是结果。我错过了什么?
最佳答案
isAuthorized
本身就是一个异步函数,并且总是返回一个promise。因此,如果您调用isAuthorized
,则必须等待结果得到解决:
var auth = await isAuthorized()
或者
isAuthorized().then( auth => ... })
只要代码的一部分以异步方式返回数据,其他依赖它的所有东西也必须通过异步方式返回。无论是
Promise
/async
,callbacks
,…