0

我正在编写一个在 mysql 数据库上插入和读取信息的脚本。我已经完成了在数据库上创建寄存器并工作的第一步,但是我在从数据库中读取数据时遇到了问题。

我有一个 main.ts 调用所有执行 select/insert 语句的函数,还有一个 dao.ts 与所有与数据库交互的函数。

这是我调用函数的代码:

const vehiclesDB = select('SELECT * FROM vehicles', con);
console.log(vehiclesDB);

这总是返回未定义。

这是执行 sql 语句的代码:

    export const select = (statement: string, dbConnection: any) => {
    const results = dbConnection.query(statement, function (err, res, fields) {
        if (err) throw err;
        return res;
    });

    return results;
}

如果我在 select 函数内的 res 变量上执行 console.log,我可以看到结果行。我尝试将结果变量设置为 select 函数的返回值,但我可以在 main.ts 上看到的是 db 连接详细信息。

这是我正在使用的通过节点与 mysql 交互的库: https ://github.com/mysqljs/mysql

4

1 回答 1

0

您没有从函数返回任何值select。此外,我认为您不能同时使用await和 acallback作为查询方法。如果库只允许回调,请将所有内容包装在 a 中Promise

export const select = (statement: string, dbConnection: any) => {
    return new Promise((resolve, reject) => {
        dbConnection.query(statement, function (err, res, fields) {
            if (err) return reject(err);
            return resolve(res);
        });
    })
}

如果库允许使用 Promises,你可能想试试这个:

export const select = (statement: string, dbConnection: any) => {
    return dbConnection.query(statement);
}

此外,由于您标记了该函数,因为aync它返回一个Promise. 您必须在调用函数时使用await或。.then()

const vehiclesDB = await select('SELECT * FROM vehicles', con);
于 2021-08-23T08:09:21.677 回答