javascript - Mongoose findOne 基于另一个文档导致未处理的 Promise Rejection 错误

标签 javascript node.js mongodb mongoose

我的应用程序有一个 MongoDB,其中有一个集合,其中包含特定员工级别的薪资数据。我试图拉动特定年级和下一个年级的薪资范围,但出现了未处理的 promise 拒绝错误。

我的测试正在寻找等级 C.London,我需要获取 C.LondonB.London 的薪资范围。数据库中的文档如下所示:

{ "_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:未处理的 promise 拒绝(拒绝 ID:1):ReferenceError:nextPayBand 未定义

最佳答案

您正在访问 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)

关于javascript - Mongoose findOne 基于另一个文档导致未处理的 Promise Rejection 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023255/

相关文章:

javascript - 使用 Mongoose 更新数组中的子文档

linux - 无法连接到服务器 127.0.0.1 shell/mongo.js

node.js - 如何监控Mongoose连接池

mongodb - 如何更改字段的类型?

javascript - DataTransfer.mozSetDataAt() 抛出 SecurityError

javascript - 使用从 ajax servlet 调用返回的 json 更新数据表时出错

mysql - 当一行添加到数据库表时 NodeJS 发出

javascript - 如何为 css 文件实现 CDN 故障保护?

javascript - 适用于移动浏览器的 WEBRTC 屏幕捕获 API

node.js - 使用 getConnection() 和在 node.js 中直接使用池与 node-mysql 模块的区别?