javascript - 同步功能无法相应地工作

标签 javascript node.js function jwt passport.js

所以,我正在使用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/

相关文章:

javascript - 如何将数组的元素作为参数传递给 JavaScript 中的函数?

c++ - 如何格式化我的函数以调用模板类?

javascript - 单击 jQuery 中的文本时如何允许单个更改 css 样式?

javascript - NodeJS - 是否可以有两个独立的集群?

node.js - 将 KillAll 发送到多 Node 进程并等待响应

function - 与功能扩展性作斗争

javascript - 在 Trigger.io 移动应用程序中启用缩放

javascript - 下载 csv 文件在 Internet Explorer 11 中不起作用,它将页面重定向到另一个页面(无法显示网页)

javascript - 通过formidable和gm使用Express.js上传的流文件,消除双写

javascript - 从遍历文件夹函数返回最终值