我试图摆脱使用Mongoose Promise与Node.js的async / await功能的束缚。printEmployees调用我的函数时,我想保存该orderEmployees函数查询的员工列表。同时,console.log内部的语句orderEmployees返回期望的查询,在console.log内部的printEmployeesreturns返回undefined,表明我没有正确返回promise。
printEmployees
orderEmployees
console.log
undefined
我对承诺完全陌生,以至于我没有正确理解范例……非常感谢您的帮助。
printEmployees: async(company) => { var employees = await self.orderEmployees(company); // SECOND CONSOLE.LOG console.log(employees); }, orderEmployees: (companyID) => { User.find({company:companyID}) .exec() .then((employees) => { // FIRST CONSOLE.LOG console.log(employees); return employees; }) .catch((err) => { return 'error occured'; }); },
您需return要这样做Promise,否则您正在等待返回的函数undefined。
return
Promise
orderEmployees: (companyID) => { return User.find({ company:companyID }).exec() }
当前,您正在等待非承诺,因此下一行代码将 立即 运行;在您真正想要等待的承诺真正解决之前。
同样 非常重要 ,您应该throw不要return在.catch处理程序中使用。或者更好的是,根本不包括.catch任何内容,而让实际的错误在承诺链中冒出,而不是用您自己的非描述性'error occured'消息覆盖它。
throw
.catch
'error occured'