提问者:小点点

使用查询绑定的promise未结束


我在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个答案

匿名用户

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})())

相关问题