首页 > 解决方案 > 如何将Node mysql查询存储在变量中?

问题描述

我正在使用节点 mysql 连接到外部数据库,我可以console.log查询结果,但是当我尝试返回我得到的数据时Promise pending

这是功能 -

export function get_info() {

    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'xxxxxx',
        user: 'bob',
        port: 'xxxx',
        password: 'bob',
        database: 'li_webform'
    });

    connection.connect(function (err) {
        if (err) throw err;
        connection.query("SELECT Name FROM webform", function (err, result) {
            if (err) throw err;
            //console.log(result); **This works**
            //console.log(result[0].Name);
            return result;
        });
    });
}

我正在尝试设置一个等于返回值的变量,如下所示

var newVar = get_info();
console.log(newVar);

但我收到了未决的承诺。我相信这与 JavaScript 的异步特性有关。我试过关注这篇文章如何使用 Node 正确返回 mysql 的结果?但无法让它工作。

这是我在该帖子之后尝试的

export function get_info(callback) {

    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'xxxxx',
        user: 'bob',
        port: 'xxxxxx',
        password: 'bob',
        database: 'li_webform'
    });

    connection.connect(function (err) {
        if (err) throw err;
        connection.query("SELECT Name FROM webform", function (err, result) {
            if (err) throw err;
            //console.log(result);
            //console.log(result[0].Name);
            return callback(result);
        });
    });
}

然后我尝试通过

var stuff_i_want = '';

get_info(function (result) {
    stuff_i_want = result;
    console.log(stuff_i_want);
});

但我没有输出

编辑** 这是新的尝试

export function get_info() {

    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'xxxx',
        user: 'bob',
        port: 'xxxxxx',
        password: 'bob',
        database: 'li_webform'
    });

    connection.connect(function (err) {
        if (err) throw err;
        connection.query("SELECT Name FROM webform", function (err, result) {
            if (err) throw err;
            //console.log(result);
            //console.log(result[0].Name);
            return result;
        });
    });
}

第二部分

    get_info().then((callbackData)=>{
   console.log("Data: ", callbackData)
 }).catch((error)=>{
    console.log("Error", error)
 });

标签: javascriptmysqlnode.jsasynchronous

解决方案


该函数返回一个承诺。你可以这样处理:

 get_info().then((callbackData)=>{
   console.log("Data: ", callbackData)
 }).catch((error)=>{
    console.log("Error", error)
 });

推荐阅读