Javascript对象在函数内返回未定义

Posted

技术标签:

【中文标题】Javascript对象在函数内返回未定义【英文标题】:Javascript object returning undefined inside a function 【发布时间】:2021-07-07 05:12:18 【问题描述】:

今天我试图用一个函数从 mysql 获取一些数据,当我 console.log 函数内的值时,都正确返回,但如果我 return <value>,它返回 undefined(rows[0] 是一个对象),例如:

function getData(userID, guildID) 
    connection.connect();
    this.guildID = guildID ?? null
    this.userID = userID ?? null
    connection.query(`SELECT * FROM data_$this.guildID WHERE id = '$this.userID'`, (err, rows, fields) => 
        if(err) throw err;
        connection.end()
        this.data = rows[0]
        return this.data;
    )

当我console.log(getData(etc, etc))时返回未定义

但如果我这样做:

function getData(userID, guildID) 
    connection.connect();
    this.guildID = guildID ?? null
    this.userID = userID ?? null
    connection.query(`SELECT * FROM data_$this.guildID WHERE id = '$this.userID'`, (err, rows, fields) => 
        if(err) throw err;
        connection.end()
        this.data = rows[0]
        console.log(this.data);
    )

它工作得非常好,记录如下:

RowDataPacket 
  id: '573991320897716224',
  bank: '0',
  wallet: '0',
  unlimited: '0'

【问题讨论】:

【参考方案1】:

发生这种情况是因为行数据在 connection.query 的回调中,并且您的 getData 函数已完成自身执行。

简单来说,现在发生的事情是您期望 getData 函数返回结果,但结果在回调中,在您的 getData 函数执行时尚未完成执行

您可以做的是创建一个承诺并在回调完成检索数据后解决它。例如

async function getData(userID, guildID) 
    connection.connect();
    this.guildID = guildID ?? null
    this.userID = userID ?? null
    return await queryDatabase(connection, guildID: this.guildID, userID: this.userID)



function queryDatabase(connectionObj, payload) 
    return new promise((resolve, reject) => 
        connectionObj.query(`SELECT * FROM data_$payload.guildID WHERE id = '$payload.userID'`, (err, rows, fields) => 
        if(err) reject(err);
        connectionObj.end()
        resolve(rows[0]);
        )
    );

【讨论】:

非常感谢您的帮助!!这解决了我的问题,感谢它

以上是关于Javascript对象在函数内返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

javascript - 使用另一个函数中的变量 javascript - '今天未在对象中定义'

Rhino Interpreter 中的 JavaScript - 函数返回未定义

Javascript函数返回未定义,预期整数值[重复]

JavaScript:函数标准对象

JavaScript getClass() 函数

JavaScript对象函数和`this`,当未绑定并在表达式/括号中返回时