【问题标题】:How to wait to pending promises to return如何等待未决的承诺返回
【发布时间】:2021-04-13 01:20:32
【问题描述】:

今天我收到了这么多 Promise { },我不知道为什么,所以我尝试console.log() 一些事情,我发现 getData() 在 queryDatabase() 之前返回,有人可以吗解释我为什么,我能做些什么来解决它?我需要在 getData() 之前返回 queryDatabase() 数据,因此承诺不会返回待处理,这是我的代码:

connection是一个MySQL连接池)

async function getData(userID, guildID) {
    this.guildID = guildID ?? null
    this.userID = userID ?? null
    this.data = await queryDatabase({guildID: this.guildID, userID: this.userID})
    console.log('foo 2')
    return this.data;
    
}

function queryDatabase(payload) {
    connection.getConnection((sqlerr, con) => {
        return new Promise((resolve, reject) => {
            con.query(`(My mysql query)`, (err, rows, fields) => {
                if(err) reject(err);
                con.end()
                resolve(rows[0]);
                console.log('foo')
            })
        });
    })
}

【问题讨论】:

  • 那么不要使用 Promise。返回行而不是 Promise。
  • 你的function queryDatabase 没有返回任何东西,因为没有return 声明
  • 你把promise放在getConnection而不是queryDatabase中。
  • 不确定您使用的是哪个 mysql 包,但如果它本身不支持 Promise,那么有支持的包。将简化您正在使用的承诺包装

标签: javascript mysql async-await mysqljs


【解决方案1】:

感谢John,我发现了这个问题,我把promise放在getConnection而不是queryDatabase中,所以这个函数没有返回任何东西,谢谢大家的帮助

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 1970-01-01
    • 2019-03-20
    • 2020-12-18
    • 2019-09-23
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多