【发布时间】:2023-03-16 19:50:01
【问题描述】:
我正在使用异步等待构建 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.query返回一个承诺,不需要promisifyAll它。 -
它需要 promisifyAll 因为我使用了 var Promise = require('bluebird') Promise.promisifyAll(sequelize) 。它将在所有查询中添加异步功能。
标签: node.js promise async-await sequelize.js