gpt4 book ai didi

node.js - Sequelize 不返回 queryAsync 对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:38 25 4
gpt4 key购买 nike

我正在使用异步等待构建nodejs api。所以我的 Controller 每个函数都是异步的,它通过模型接收 promise 。对于查询,我使用了sequelize包来与数据库交互。为了使用sequelize异步查询行为,我选择promisfy的bluebird插件。

Promise.promisifyAll(sequelize)

在我的模型中,我编写了一个返回数据的方法,但是当我调用sequelize.query时,它将返回数据,但是当我编写sequelize.queryAsync时,它不应该返回数据。当我打印sequelize对象时该函数就存在。我想知道如何获取 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
})
}

在 Controller 中我使用这种方式。

LeadController.getlead = async function(req, res) {
try {
let datanew = await LeadModel.getActiveRecords();
console.log(datanew);
} catch (e) {
throw e;
}
}

您能帮我解决为什么sequelize不返回异步查询结果吗?

最佳答案

你所做的事情完全没有必要。您正在返回一个包装异步函数的新 promise (异步函数总是返回 promise ,这就是它们的工作方式)。在该函数中,您正在调用已经返回 promise 的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'");

并在 Controller 中使用它:

LeadController.getlead = async function(req, res, next) {
try {
let datanew = await LeadModel.getActiveRecords();
console.log(datanew);
} catch (e) {
console.log(e);
return next(err);
}
}

关于node.js - Sequelize 不返回 queryAsync 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com