在代码中
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
您将需要使用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,它接受一个回调(这就是 作用域,然后将范围传递给此回调,依此类推。
get_info
function(err, results)
欢迎使用JavaScript回调地狱…
当您掌握它时很容易,只是需要一点点习惯,就来自C#之类的东西