Javascript Can';t解析导出的异步函数NodeJS上的承诺

Javascript Can';t解析导出的异步函数NodeJS上的承诺,javascript,mysql,node.js,bluebird,Javascript,Mysql,Node.js,Bluebird,因此,我在导出异步函数时遇到了这个问题: async function getItemData(callback) { let result = await pool.getConnection(async function(err, con) { if (err) throw err; let queryPromise = await new Promise((resolve, reject)=> { con.query

因此,我在导出异步函数时遇到了这个问题:

async function getItemData(callback) {
    let result = await pool.getConnection(async function(err, con) {
        if (err) throw err;

        let queryPromise = await new Promise((resolve, reject)=> {

            con.query("SELECT * FROM customers", function(err, rows) {

                if (err) {
                    console.log(err);
                    reject(err);
                } else {
                    console.log('Found records : ' + rows.length);
                    resolve(rows);
                }

            });

        });
    }); 
}

module.exports.getItemData = getItemData;
这就是它的名称:

app.listen(port, function () {

    console.log('Api server is listening on port '+ port);

    // Call the async function  
    (async () => {  

    let result = await driver.getItemData();

    console.log(result);
    )();

});
promise中的console.log起作用。但函数外部的console.log返回未定义。 知道原因吗?

有两个问题:

  • 您的函数没有返回任何内容,那么为什么要定义
    result
  • 我怀疑
    getConnection()
    不是异步函数。您将异步函数作为回调传递,但这不会使函数本身异步。因此,您的
    wait
    什么也不做
您可以尝试将整个函数包装在一个
Promise
中,并按如下方式返回:

async function getItemData() {
    return new Promise((resolve, reject)=> {
        pool.getConnection(function(err, con) {
            if (err) return reject(err);

            con.query("SELECT * FROM customers", function(err, rows) {
                if (err) {
                    console.log(err);
                    reject(err);
                } else {
                    console.log('Found records : ' + rows.length);
                    resolve(rows);
                }

            });
        });
    }); 
}

module.exports.getItemData = getItemData;
同样在您的另一个文件中,我只需使整个函数异步,那么您就不需要那个难看的包装器:

app.listen(port, async () => {

    console.log('Api server is listening on port '+ port);

    let result = await driver.getItemData();

    console.log(result);

});