所以,我正在使用passport-jwt并解决这个问题。我有两个模型,分别是具有姓名、地址、 Angular 色...的员工和具有用户名、密码、员工(Object_Id)的员工凭证。 然后我想要的是,在找到员工用户名和密码后,我需要员工 Angular 色,因此我使用了employee.findbyId,但它返回一个 promise 并在获取员工 Angular 色之前调用完成的回调。
我想要的是为什么会发生(详细信息以供理解)???我没有使用 async/await 所以该函数是同步的。
(passport)=>{
let options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
options.secretOrKey = config.SECRET;
passport.use(new Strategy( options,(payload,done)=>{
Employee_credential.findById(payload.data._id, (err, employee)=>{
if(err) return done(err,false);
if(employee){
var result = Employee.getById(employee.employee).populate('role').catch(err=>{throw err})
employee.role = result.role.role_Id;
return done(null, employee);
}
return done(null,false);
})
}))
}
最佳答案
这里的事情可能按顺序发生,但不是同步发生。您的函数按照编写的顺序发生,但不会等待 API 调用的结果。这就是为什么你得到的是 promise 而不是员工的 Angular 色。为了完成这项工作,您应该使用 async/await (我的首选方法)或返回一个 promise 并使用 .then
设置下一个函数。 .
根据个人经验,并非所有 API 都能与 await
正常工作。取决于他们如何处理 promise 。在某些情况下,我必须将其与通过 return new Promise((resolve) => { //your function; resolve(employee); }
显式解决 promise 结合起来。或类似的东西。
关于javascript - 同步功能无法相应地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60819815/