所以,我无法理解为什么我的 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() 的顶部正常工作。我在那里做的事情和我在这里做的完全一样。那么为什么它不起作用。请帮帮我,我已经为此纠结了几个小时了。