我想使用此函数检查用户是否被授权访问资源:

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/asynccallbacks,…

09-18 08:17