当前位置: 首页 > 知识库问答 >
问题:

使用查询绑定的promise未结束

葛晔
2023-03-14

我在NodeJS的模块mysqlfunction中有这个函数query。当查询没有绑定时,这些函数没有问题,但当我使用绑定时,例如,在whereinsert中使用参数时,承诺不会结束,请求也永远不会结束。奇怪的是指令被执行,例如,字段被插入到表中,或者select返回数据。

//mysqlFunction.js
const mysql = require("MySQL");
const pool = mysql.createPool(dbConfig);
const query = (sql, binding) => {
    return new Promise((resolve, reject) => {
        pool.query(sql, [binding], (err,result) => {
            if (err) reject(err);
            resolve(result);
        });
    });
};

//Calling the function
const exampleId = 1;
const sql = `SELECT * FROM table WHERE id = ?`;
mysqlFunction.query(sql, exampleId, (error, results) => {
    if (error) throw error;
    if (results.length > 0){
        res.json (results);
    } else {
        res.send('No result')
    }
});

共有1个答案

岳正阳
2023-03-14

query()函数被定义为返回一个承诺,但您正在使用它,就好像它只是一个异步函数--向它传递一个回调来处理程序的继续。

您应该将query()更改为异步函数。

const query = (sql, binding, cb) => {
        pool.query(sql, [binding], (err, result) => {
            if (err) return cb(err);
            cb(null, result);
        });
    });
};

或者按当前构造的方式打开它返回的promise-根据您的设置使用awaitthen()方法。

let results = await mysqlFunction.query(sql, exampleId)

if (results.length > 0){
    res.json (results);
} else {
    res.send('No result')
}

如果执行上下文不允许使用await关键字,则可以将其包装在一个异步iife-(async function(){//your code})())

 类似资料:
  • 我有一个API调用,它需要从MySQL数据库中提取一些信息,以便完成请求。问题是,NodeJS不会等待查询响应,我已经尝试用承诺来解决这个问题。下面是我的代码: 这个函数将返回Promise对象,这将触发SQL语法错误,因为这不是预期的数据库输入。我做错了什么?任何建议都非常感谢。

  • 存储库接口: 当我运行调用本机查询的endpoint时,我得到异常: 无法将值“{0,198}”从类型[java.lang.Object[]]转换为类型[com.representation.representation];嵌套异常为org.springframework.core.convert.converterNotFoundException:未找到能够从类型[java.math.BigD

  • 简短版本: 我希望能够将结构转换为元组。至少是那种类型。在下面的代码中,convertToTuple函数不起作用,因为可变参数不能用于结构化绑定(据我所知)。关键是:自动 基本上,我需要的是一种将自定义结构的类型转换为元组的方法,元组包含结构中的所有类型。例如: 具体问题: 我想创建一个模板函数,它将一个类型或一个类型列表作为模板参数,并生成一个纹理列表,每个纹理包含一个项目。另一个函数可以对纹理

  • 我正在编写一个JCR SQL2查询,其中列出了给定类型的所有节点,这些节点都是特定路径的后代。当我这样写我的查询时: 它工作正常,但是当我尝试绑定ISDESENDANTNODE下的内容时,就像这样: 在query.bind值("base",...)上引发异常: “javax.jcr.query.InvalidQueryException:java.text.ParseException:query

  • 我们的一个客户正在为他们的标识提供程序提供包含参数的URL。元数据如下所示(为简洁起见,进行了大量缩写): 可以看到,有一个名为“parameter”的参数,其值为“value”。生成的重定向URL中不存在此参数。我稍微调试了一下,发现从绑定(对于HTTP重定向来说是)获取,并委托对消息进行编码。编码器依次在其方法中执行以下操作: 所以出于某种原因,参数被故意无条件地剥离。 为什么会这样?我如何才

  • 我正在使用SQLALchemy对Teradata执行查询。我执行的查询之一是替换存储过程的DDL语句: 此SQL语句被分配给变量,并由SQLALchemy使用会话执行方法执行: 问题是SQLAlchemy假设变量是一个应该随字典一起提供的参数。请参阅以下文档:http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.o