NodeJS 承诺返回未定义。 MySQL 连接

时间:2021-01-21 03:42:52

标签: javascript mysql node.js async-await

所以,我无法理解为什么我的 console.log()tester() 函数中返回 undefined。我的承诺处理有问题,但我不知道它是什么。

这是代码片段:

async function createConnection(tenant_id){


    assure_api = await connectMainDB()
    assure_api.query(`SELECT wh_db_host FROM license WHERE client_id='${tenant_id}'`, (err, result) => {
        if(err){
            log.error(`Could not find a host for ${tenant_id} || Error: ${err}`)
        }
        else {

            let tenant_db = mysql.createConnection({
                host: result.wh_db_host,
                user: dbSettings.user,
                password: dbSettings.password,
                database: tenant_id
            })

            tenant_db.connect((err) => {
                if(err){
                    log.error(`Couldn't setup connection for ${tenant_id}. Error: ` + err)
                    log.info(`More info about error above ----- Host: ${result}, Database: ${tenant_id}`)
                    console.log(err)
                }
                else {
                    log.info("Setup connection for ", tenant_id)
                    console.log('Setup connection for ', tenant_id)


                    
                }
            })


            console.log(tenant_db) //logs a huge connection object
            return tenant_db;
            
        }
    })
}


async function tester(){

    let thing = await createConnection('chkn');
    console.log(thing) //logs undefined
}

tester() //driver

另请注意,当我从 createConnection() 异步函数内部调用 console.log 时,它成功返回了整个连接对象。那么为什么当它传递给测试器函数时它变成未定义的?

还有第 2 点,另一个值得注意的有趣事情是,当我从另一个函数获取连接对象时,await 在 createConnection() 的顶部正常工作。我在那里做的事情和我在这里做的完全一样。那么为什么它不起作用。请帮帮我,我已经为此纠结了几个小时了。

0 个答案:

没有答案