一尘不染

如何使用Node从MySQL正确返回结果?

node.js

在代码中

var stuff_i_want = '';
stuff_i_want = get_info(parm);

和功能get_info:

get_info(data){
      var sql = "SELECT a from b where info = data"
      connection.query(sql, function(err, results){
            if (err){ 
              throw err;
            }
            console.log(results[0].objid); // good
            stuff_i_want = results[0].objid;  // Scope is larger than function
            console.log(stuff_i_want); // Yep. Value assigned..
    }

在更大的范围内

stuff_i_want = null

关于返回mysql数据并将其分配给变量,我缺少什么?

=============根据Alex建议的新代码

var parent_id = '';
    get_info(data, cb){
          var sql = "SELECT a from b where info = data"
          connection.query(sql, function(err, results){
                if (err){ 
                  throw err;
                }
                return cb(results[0].objid);  // Scope is larger than function
    }

====正在使用新代码

 get_data(parent_recording, function(result){ 
    parent_id = result;
    console.log("Parent ID: " + parent_id); // Data is delivered
  });

然而

console.log("Parent ID: " + parent_id);

在函数外部的作用域中,parent_id为null


阅读 446

收藏
2020-07-07

共1个答案

一尘不染

您将需要使用javascript进行异步调用和回调,这不是c#/ php等。

这是使用您的代码的示例:

function get_info(data, callback){

      var sql = "SELECT a from b where info = data";

      connection.query(sql, function(err, results){
            if (err){ 
              throw err;
            }
            console.log(results[0].objid); // good
            stuff_i_want = results[0].objid;  // Scope is larger than function

            return callback(results[0].objid);
    }
}


//usage

var stuff_i_want = '';

 get_info(parm, function(result){
    stuff_i_want = result;

    //rest of your code goes in here
 });

当您get_info依次调用此function(err, results)函数时,将调用connection.query,它接受一个回调(这就是
作用域,然后将范围传递给此回调,依此类推。

欢迎使用JavaScript回调地狱…

当您掌握它时很容易,只是需要一点点习惯,就来自C#之类的东西

2020-07-07