Node.JS函数返回异步回调函数的值

零字节器

在Node.JS中,我有一个函数可以连接MySQL数据库,获取一堆行,然后将它们作为数组返回。我的问题是asynchronous代码,我正在使用asyncNode.JS模块。

到目前为止,这是我的功能:

var async = require("async")
function get_all_channels_by_order(){
    async.waterfall([
        function(callback){
            mysql_connection.connect()
            mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", function(err, result){
                callback(null, result)
            })
        }
    ], function(err, result){
        mysql_connection.end()
        return result
    })
    //return ?? somehow, return the value from the MySQL query?
}
console.log(get_all_channels_by_order())

当用于调用该函数的行已经检查了返回值(即使尚未发送)时,就会出现问题。

如何才能做到这一点?可能吗?我意识到我无法使用此功能,并在需要时手动执行查询,但最终将完全没有组织和混乱。

我之前曾问过这个问题:“在范围之外更改变量”,它被标记为“在函数内部修改变量后,为什么变量没有改变? ”的重复项-“异步代码参考”,该问题涉及异步代码,而不是如何使函数从中返回值,而我不知道该如何做。

num8er

由于它是异步代码,因此必须使用回调来获取数据。

您认为如果您使用async软件包将对您有帮助return result吗?

  • 你不能。

当您有许多使用上一个函数结果的函数时,异步包有助于摆脱回调地狱。

在您的情况下,您不需要异步。

请阅读或观看有关nodejs异步行为的教程。例如,本教程系列:时间轴03:00,其中说明了阻塞与非阻塞代码

因此,仅在这种情况下才能在查询执行后获取数据:

mysql_connection.connect();

function get_all_channels_by_order(callback){
    mysql_connection.query("SELECT * FROM channels ORDER BY listorder ASC", callback);
}

get_all_channels_by_order(function(err, result) {
  if(err) {
    console.error(err);
    return;
  }

  console.log(result);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章