Javascript NodeJS MySQL如何获取查询函数之外的结果

Javascript NodeJS MySQL如何获取查询函数之外的结果,javascript,mysql,node.js,express,connection-pooling,Javascript,Mysql,Node.js,Express,Connection Pooling,我似乎不知道如何在NodeJS MySQL池查询之外获得结果。下面是一些示例代码,可以更好地解释我的意思 var result = 'Hello world!'; var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 100, host : process.env.DB_HOST, user : process.env.DB_

我似乎不知道如何在NodeJS MySQL池查询之外获得结果。下面是一些示例代码,可以更好地解释我的意思

var result = 'Hello world!';

var mysql = require('mysql');
var pool = mysql.createPool({
    connectionLimit : 100,
    host            : process.env.DB_HOST,
    user            : process.env.DB_USERNAME,
    password        : process.env.DB_PASSWORD,
    database        : process.env.DB_DATABASE
});

pool.query('SELECT * from user LIMIT 10', function (err, rows) {
    result = rows;
});

res.send(result);
上面的内容将返回“你好,世界!”而不是查询


如果我在pool.query函数中使用console.log(result),它将返回查询中的行,但似乎无法获取函数外部的数据。我已经记录了函数并检查了所有相关函数,我想我只是缺少一些基本的东西

您将在查询完成(并调用回调)之前返回结果。在回调中发送结果将解决此问题:

pool.query('SELECT * from user LIMIT 10', function (err, rows) {
    result = rows;
    res.send(result);
});

正如Aaron指出的,这是一个常见的问题。可以找到更全面的答案。

池查询功能是异步的。这意味着您的代码不会按照声明语句的顺序执行

启动查询并指定一个回调函数,该函数应在查询异步操作完成时运行

res.send将在查询和回调声明之后立即运行,回调将在稍后运行。设置结果时,您已经发送了结果

尝试将res.send移到回调中

pool.query('SELECT * from user LIMIT 10', function (err, rows) {
    res.send(rows);
});

可能是重复的你知道怎么做吗?到目前为止,这里的每个人似乎都间接地回答了这个问题。答案上的链接和上面的评论——虽然需要知道,但确实是TMI——至少目前是这样,因为我们无法立即直接体验到有效的解决方案。我希望至少会有一个示例代码,其中包含所有必需的元素,以直接见证解决方案是否工作以及如何工作。函数回调中的节点版本8 up+异步/等待