将 async/await 与 mongoose 一起使用时出现错误

when using async/await with mongoose i get an error

我想从我的 mongo 数据库中获取一个 ObjectId,但是使用 async / await,我得到一个错误:

错误 [ExceptionsHandler] 查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } }) MongooseError:查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } })

我想异步调用 mongoose,因为我的 userRoles 数组在我想在此代码块后使用它时是空的;

这是代码 role.guard.ts

  [...]
  async canActivate(context: ExecutionContext): Promise<boolean> {
    const userRoles: string[] = [];
    let accessRoleId = '';

    let isAuthorized = false;
    const accessRole = this.reflector.get<string[]>('roles', context.getHandler());
    if (!accessRole) {
      return true;
    }
    const request = context.switchToHttp().getRequest();
    const user = request.user;

    for (let i = 0; i < user.roles.length; i++) {
      const role: string = user.roles[i]
      userRoles.push(role);
    }

    const findId = await this.RoleModel.findOne({ 'name': accessRole }
    , (err, role) => {
    if (err){
        console.log(err);
    }
    else {
        console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
        accessRoleId = role._id.valueOf();
    }
  });

  [...]

}

有什么想法吗?谢谢!

您可以使用回调或承诺。

回调:

 const findId = this.RoleModel.findOne({ 'name': accessRole }
    , (err, role) => {
    if (err){
        console.log(err);
    }
    else {
        console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
        accessRoleId = role._id.valueOf();
    }

承诺:

 try {
     const role = await this.RoleModel.findOne({ 'name': accessRole });
     console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
     accessRoleId = role._id.valueOf();
 } catch(err) {
     console.log(err);          
 }