首页 > 解决方案 > 为什么 sequelize.findOne() 没有返回结果,而我可以看到结果在我的数据库中

问题描述

我正在尝试将一些数据保存到我的数据库中,但我有一个条件,如果数据已经存在,请不要再次插入。

我为此任务创建了几个函数。我可以毫无问题地将数据插入我的数据库。但是一旦我开始添加这个现有的数据检查条件,看起来 findOne() 函数总是返回 null,即使我只是将数据添加到 DB 中。

运行插入数据库的最高级别代码,saveInvoice(i) 正在工作:

if (!this.checkInvoic(i)) {
  this.saveInvoice(i)
 }

检查发票数据是否已经存在的代码,结果应该是什么,但它是空的:

checkInvoic(invoice) {
  return this.checkSingleInvoice(invoice.team_id, 
    invoice.invoice_number)
            .then((result) => {    // this result should be something.
                if (result !== undefined) {
                return resolve(true);
            } else {
                return resolve(false);
            }
            })
    }

这些是处理 sequelize 的函数:

create(invoice) {
        return this.invoicesModel.create(invoice);
    }

checkSingleInvoice(team_id, invoice_id) {
        return this.invoicesModel.findOne({
            where: {
                invoice_id,
                team_id,
            }
        })
    }

我期待当我将 invoice.team_id 和 invoice.invoice_id 提供给 checkSingleInvoice() 函数时,它将返回数据库中存在的结果,并在 checkInvoice() 函数中返回 true。但是当我运行它时,我有评论的那一行的结果返回了 null。我只是想知道为什么?那是我在 Promise 或 Sequelize 中做错了什么吗?

标签: javascriptnode.jspromisesequelize.js

解决方案


我认为您的问题是checkInvoic(sic) 返回 a Promise,但是您的条件检查没有考虑到这一点。

有两种可能的修复方法:

1)使用await

if (await !this.checkInvoic(i)) {
  this.saveInvoice(i)
}

2)使用then

this.checkInvoic(i).then(exists => {
  if (!exists) return this.saveInvoice()
}

推荐阅读