node.js - Sequelize 不返回 queryAsync 对象
问题描述
我正在使用异步等待构建nodejs api。所以我的控制器每个函数都是异步的,它接收模型的承诺。对于查询,我使用了 sequelize 包来与数据库进行交互。对于使用 sequelize 异步查询行为,我选择 bluebird 插件进行 promisfy。
Promise.promisifyAll(sequelize)
在我的模型中,我编写了一个返回数据的方法,但是当我调用 sequelize.query 时,它会返回数据,但是当我编写 sequelize.queryAsync 时,它不应该返回数据。当我打印续集对象时,该功能存在。我想知道如何获取 queryAsync 数据。
LeadModel.getActiveRecords = function () {
return new Promise(async (resolve, reject) => {
try {
let output = await LeadModel.sequelize.queryAsync("SELECT * FROM some_tbl where status = '1'")
// This below query is working fine without queryAsync
//let output = await LeadModel.sequelize.query("SELECT * FROM some_tbl where status = '1'")
resolve(output)
} catch (e) {
reject(e)
}d
})
}
在控制器中,我正在使用这种方式。
LeadController.getlead = async function(req, res) {
try {
let datanew = await LeadModel.getActiveRecords();
console.log(datanew);
} catch (e) {
throw e;
}
}
你能帮我弄清楚为什么续集不返回异步查询结果。
解决方案
你在做什么是完全没有必要的。您正在返回一个包装异步函数的新承诺(异步函数总是返回承诺,这就是它们的工作方式)。在该函数中,您正在调用已经返回承诺的 sequelize 查询方法。
同样在 sequelize 上使用 promisifyAll 是完全不必要和多余的,因为 sequelize 已经是异步的,您可以将大多数方法与 async/await 一起使用。
这将做你正在做的完全相同的事情:
LeadModel.getActiveRecords = function() {
return LeadModel.sequelize.query("SELECT * FROM some_tbl where status = '1'");
}
// Or you can do it in a single line
LeadModel.getActiveRecords = () => LeadModel.sequelize.query("SELECT * FROM some_tbl where status = '1'");
并在控制器中使用它:
LeadController.getlead = async function(req, res, next) {
try {
let datanew = await LeadModel.getActiveRecords();
console.log(datanew);
} catch (e) {
console.log(e);
return next(err);
}
}
推荐阅读
- html - 输入框值不应超过 100,但它正在使用且不在表单中
- node.js - 从服务器超时发出nodejs请求
- node.js - 在 Visual Studio 中构建 Cordova 项目时出错
- stackdriver - 用于 OracleDB 的 Google Stackdriver 数据库代理?
- c# - 如何在 GetResponse 中检查 HttpStatusCode.OK
- javascript - Safari 调用 decodeAudioData 错误,在 Chrome 工作的地方出现 null
- ios - Apple 说“您的 iOS 分发证书即将到期”我需要做什么
- angular - 添加推送通知的 Ionic 3 问题
- javascript - 在谷歌地图javascript api中的两个特定标记上放置标签
- asp.net-mvc - 从 ZipCode 中检索 Lat Long