首页 > 解决方案 > Mongoose findOne 基于另一个文档导致未处理的 Promise Rejection 错误

问题描述

我有一个用于我的应用程序的 MongoDB,其中我有一个集合是某个员工等级的工资带数据。我正在尝试为特定等级和下一个等级拉上工资带,但我得到了一个未处理的承诺拒绝错误。

我的考试正在寻找成绩C.London,我需要获得 和 的工资C.LondonB.London。db 中的文档如下所示:

{ "_id" : ObjectId("5c1cafe41d134100196750fa"), "gradeName" : "C.London", "minimum" : 53600, "midpoint" : 76550, "maximum" : 99500, "nextGrade" : "B.London", "__v" : 0 }
{ "_id" : ObjectId("5c1cafe41d134100196750de"), "gradeName" : "B.London", "minimum" : 53600, "midpoint" : 76550, "maximum" : 99500, "nextGrade" : "null", "__v" : 0 }

获取值的代码段是:

// Get Pay bands
  let currentPayBand = await db.PayBand.findOne({
    gradeName: targetEmployee.grade
  });

  console.log(currentPayBand);

  if (currentPayBand.nextGrade) {
    let nextPayBand = await db.PayBand.findOne({
      gradeName: currentPayBand.nextGrade
    });
  } else {
    const nextPayBand = {
      minimum: null,
      midpoint: null,
      maximum: null
    }
  }

  console.log(nextPayBand);

它找到了currentPayBand正确的,因为 console.log 正确输出,但随后出现以下错误:

(node:25) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: nextPayBand is not defined

标签: javascriptnode.jsmongodbmongoose

解决方案


您正在访问 if 之外的局部变量。您可以这样做或在 if 条件下进行处理。

let nextPayBand = null

if (currentPayBand.nextGrade) {
  nextPayBand = await db.PayBand.findOne({
    gradeName: currentPayBand.nextGrade
  });
}
else {
  const nextPayBand = {
    minimum: null,
    midpoint: null,
    maximum: null
  }
}

console.log(nextPayBand)

推荐阅读