javascript - 为什么 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 中做错了什么吗?
解决方案
我认为您的问题是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()
}
推荐阅读
- c++14 - 如何禁用实例化临时类?
- python - 将字符串的数据转换为列表的字符串
- single-sign-on - 无签名的 SSO Saml 协议绑定
- geometry - 如何在多边形(可能是凹多边形)中找到视点可以最边缘的多边形的视点?
- python - Tensorflow 的 Eager 模式下的性能测量
- sql-server - 带有大文件的 TempDB - 性能问题
- java - 我的媒体播放器播放列表仅在 android studio 的列表视图中复制一首歌曲 下面是我的播放列表代码
- ios - 自定义类以更改多个 VC 中的背景;类型“class”没有成员“x”
- ios - 如何调试 APIService 的代码
- flask-sqlalchemy - 为什么不能在烧瓶上创建迁移?