一尘不染

在异步/等待中使用猫鼬承诺

node.js

我试图摆脱使用Mongoose Promise与Node.js的async /
await功能的束缚。printEmployees调用我的函数时,我想保存该orderEmployees函数查询的员工列表。同时,console.log内部的语句orderEmployees返回期望的查询,在console.log内部的printEmployeesreturns返回undefined,表明我没有正确返回promise。

我对承诺完全陌生,以至于我没有正确理解范例……非常感谢您的帮助。

  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';
    });
  },

阅读 168

收藏
2020-07-07

共1个答案

一尘不染

您需return要这样做Promise,否则您正在等待返回的函数undefined

orderEmployees: (companyID) => {
  return User.find({ company:companyID }).exec()
}

当前,您正在等待非承诺,因此下一行代码将 立即 运行;在您真正想要等待的承诺真正解决之前。

同样 非常重要
,您应该throw不要return.catch处理程序中使用。或者更好的是,根本不包括.catch任何内容,而让实际的错误在承诺链中冒出,而不是用您自己的非描述性'error occured'消息覆盖它。

2020-07-07