javascript全局变量和返回值
我编写了以下代码,但它并没有返回tDate值,接收到未定义的错误。 log显示了结果,我想我使用全局变量的方式是错误的。 似乎在循环之后,tDate仍然没有启动,在循环内部它正在接收值我如何定义全局变量javascript全局变量和返回值,javascript,Javascript,我编写了以下代码,但它并没有返回tDate值,接收到未定义的错误。 log显示了结果,我想我使用全局变量的方式是错误的。 似乎在循环之后,tDate仍然没有启动,在循环内部它正在接收值我如何定义全局变量 function getDates(){ var tDate; var pool = new ConnectionPool(poolConfig, config); pool.requestConnection(function (err, connection) {
function getDates(){
var tDate;
var pool = new ConnectionPool(poolConfig, config);
pool.requestConnection(function (err, connection) {
if(!err) {
var sql = "SELECT MAX(Date) from datatable";
var request = new Request(sql, function(err, rowCount) {
if (err) {
console.log(err);
}
// Release the connection back to the pool.
connection.close();
});
request.on('row', function(columns) {
columns.forEach(function(column) {
if (column.value === null) {
console.log('NULL');
} else {
var date = column.value;
var sDate = new Date(date);
sDate = sDate.toISOString().slice(0,10);
tDate = 'Today= ' + sDate;
console.log(tDate);
}
});
});
connection.on('connect', function(err) {
connection.execSql(request);
});
}
});
return tDate;
}
你犯了一个典型的错误,你写的代码将按照你看到的顺序执行。不会的。您是绑定事件监听器,如果发生什么事情,它将调用回调函数。只有在request.on'row'回调中,才会修改tDate的值 请求在很大程度上是异步操作,可以这样想:
function testCallback()
{
var someVar = 213;
setTimeout(function()
{
someVar = 'New value';
}, 10000);//10 seconds
return someVar;
}
console.log(testCallback());
这不会花费10秒来记录,而是几乎立即记录213,但10秒后,现在无法访问的变量someVar将被重新分配
您可以通过执行以下操作进行测试:
function testCallback()
{
var valObj = {someVal: 213};
setTimeout(function()
{
valObj.someVal = 'new value';
}, 10000);
return valObj;
}
var o = testCallback();
console.log(o.someVal);//213, still
// wait 10 seconds
console.log(o.someVal);//new value <--
你想过SQL注入吗?Johan你什么意思?这段代码正在服务器上运行,有什么建议吗?日期是多少?给定var sDate=new Datedate,它很可能是一个字符串,在这种情况下,强烈建议不要使用new Datedate。使用日期构造函数解析字符串是非常不可靠的,特别是如果您使用的ISO字符串没有时区,如sDate.toISOString.slice0,10所示。目前要求这些字符串是本地的,需要UTC。好吧,如果有人复制您的脚本并用DROP TABLE datatable替换SELECT MAXDate from datatable、SELECT*from information_schema.tables等,这并不难。hmmm看起来我有很多问题:谢谢大家的建议+1,此外,我还要检查column.value是否是有效的日期值—可以转换为日期的字符串。但是为了让它工作,我认为你的答案是正确的。@davidkonrad字符串根本不应该传递给日期构造函数。他们的格式应该是已知的,应该手动解析。我是JS新手,我是c,c程序员。谢谢你的建议,我会尽力解决这个问题。@zevsuld:在编写JS时,有一件事你应该时刻牢记在心,那就是函数式编程语言。相应地对待它。在函数中思考,而不是在语句中思考。如果你那样做,你会没事的