首页 > 解决方案 > Nodejs函数返回未定义,虽然回调参数有一个值

问题描述

我有以下代码:

const get = (ip,key) => {
mysql.query(`SELECT content FROM sessions WHERE ip = "${ip}" AND name = "${key}" ORDER BY id DESC LIMIT 1`,(err,result) => {
    if(err) throw err
    console.log('Callback:',result[0].content)
    return result[0].content
})
}

console.log('Return:',get('10.0.0.9','test'))

它产生以下输出:

Return: undefined
Callback: test content

为什么我的函数没有返回任何东西?

标签: mysqlnode.jsfunctionundefined

解决方案


值“测试内容”是您传递给的处理程序(或回调)实际返回的内容mysql.query()

您的函数get实际上不返回任何内容。

您正在处理一个异步函数。有几种方法可以解决您的问题。

最简单的方法是将第三个参数传递给您的 get 函数,一个回调函数,然后在您的 mysql 处理程序中调用它。就像是:

const get = (ip,key,callback) => {
mysql.query(`SELECT content FROM sessions WHERE ip = "${ip}" AND name = "${key}" ORDER BY id DESC LIMIT 1`,(err,result) => {
    if(err) throw err
    console.log('Callback:',result[0].content);
    // Call you custom callback here to forward result
    callback( result[0].content );
})
}

get('10.0.0.9','test', (result) => console.log('Return:', result));

另一种更现代的方法是使用Promise

最“最新”的解决方案是使用async/await


推荐阅读