mysql - NodeJS 和 mysql : wait for query result

标签 mysql node.js asynchronous

我有一个用 nodejs + express 制作的小项目,我还制作了一个小服务,可以在其中的一些页面上共享。

var mysql = require('mysql');

var pool = mysql.createPool({
        connectionLimit : 100,
        host     : 'host',
        user     : 'user',
        password : 'password',
        database : 'database',
        debug    : false
});

function executeQuery(query, callback) {
    pool.getConnection(function (err, connection) {
        if (err) {
            return callback(err, null);
        }
        else if (connection) {
            connection.query(query, function (err, rows, fields) {
                connection.release();
                if (err) {
                    return callback(err, null);
                }
                return callback(null, rows);
            })
        }
        else {
            return callback("No connection", null);
        }
    });
}


function getResult(query) {
    return executeQuery(query, function (err, rows) {
                if (!err) {
                    return rows;
                }
                else {
                    console.log(err);
                }
            });
}

function getServers()
{
    var list = getResult("select * from table");
    return list;
}

exports.getList = getList;

现在,我的问题是:当我调用 module.GetServers(); 时从另一个模块,结果总是未定义的,因为 pool.getConnection 是异步的(我想,我很新)所以 executeQuery 没有结果。 如何强制 executeQuery 等待 connection.query 产生结果?

最佳答案

在您的 executeQuery 函数中,您使用回调来等待结果。同样,通过在 getResult 函数中实现它们,您可以让它在查询执行后等待结果。像这样。

var mysql = require('mysql');
var pool = mysql.createPool({
    connectionLimit : 100,
    host     : 'host',
    user     : 'user',
    password : 'password',
    database : 'database',
    debug    : false 
 });

function executeQuery(query, callback) {
  pool.getConnection(function (err, connection) {
    if (err) {
        return callback(err, null);
    }
    else if (connection) {
        connection.query(query, function (err, rows, fields) {
            connection.release();
            if (err) {
                return callback(err, null);
            }
            return callback(null, rows);
        })
    }
    else {
        return callback(true, "No Connection");
    }
  });
}


function getResult(query,callback) {
  executeQuery(query, function (err, rows) {
     if (!err) {
        callback(null,rows);
     }
     else {
        callback(true,err);
     }
  });
}

function getServers() {
  getResult("select * from table",function(err,rows){
    if(!err){
        return rows;
    }else{
        console.log(err);
    }
  });   
}

exports.getList = getList;

关于mysql - NodeJS 和 mysql : wait for query result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775177/

相关文章:

node.js - Angular 2在不重新启动的情况下不显示图像

javascript - 如何从异步调用返回响应?

android - Web 服务作为 Android 客户端和 MySQL 服务器数据库之间的中介

java - mysql 时间戳更新在列中使用相同的值

javascript - Promise-mysql 返回 promise

php - 如何将数字格式化为十进制以将其存储在 mysql 中?

node.js - 我可以在浏览器中启动 socket.io/websocket 服务器吗?

javascript - 为什么我得到空结果?

ios - 如何在uitableview中异步加载图像而不出现内存警告?

javascript - 如何调试 "TypeError: A promise cannot be resolved with itself"