我在NodeJS的模块mysqlfunction
中有这个函数query
。当查询没有绑定时,这些函数没有问题,但当我使用绑定时,例如,在where
或insert
中使用参数时,承诺不会结束,请求也永远不会结束。奇怪的是指令被执行,例如,字段被插入到表中,或者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')
}
});
query()
函数被定义为返回一个承诺,但您正在使用它,就好像它只是一个异步函数--向它传递一个回调来处理程序的继续。
您应该将query()
更改为异步函数。
const query = (sql, binding, cb) => {
pool.query(sql, [binding], (err, result) => {
if (err) return cb(err);
cb(null, result);
});
});
};
或者按当前构造的方式打开它返回的promise-根据您的设置使用await
或then()
方法。
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})())
中