在节点js中执行for循环后,我一直在尝试获取变量的值。但它显示为未定义。但是当我在5000ms之后调用setTimeout函数中的变量时,相同的变量正在获得所需的值。我不想使用setTimeout,因为它因使用我的应用程序的用户而异。
我尝试的代码是
function getQuestions()
{
for(x=0;x<sevenQIDs.length;x++)
{
var query = connection.query('SELECT QUESTION, OP1, OP2, OP3, OP4, ANS FROM QUESTIONS WHERE QUESTION_ID="'+sevenQIDs[x]+'"', function(err,result,fields){
if(err){
throw err;
}
else{
var a = result[0];
var resTime = [], resAns = [];
resTime.length = 5;
resAns.length = 5;
a.resTime = resTime;
a.resAns = resAns;
sevenQues.push(a);
}
});
}
}
socket.on('socket1', function(text)
{
getQuestions();
console.log(sevenQues);
}
这里sevenQues是一个全局变量,我在控制台中未定义。但是,当我把它 的setTimeout(()的函数 { 的console.log(sevenQues); },5000);
我获得了理想的价值。请帮我解决这个问题,我听说有一些async.js文件可以执行foreach循环来发送所需的输出。但是我无法完成这件事。 Anyhelp将不胜感激。
答案 0 :(得分:1)
试试这个:
function getQuestions(callback)
{
for(x=0;x<sevenQIDs.length;x++)
{
var query = connection.query('SELECT QUESTION, OP1, OP2, OP3, OP4, ANS FROM QUESTIONS WHERE QUESTION_ID="'+sevenQIDs[x]+'"', function(err,result,fields){
if(err){
throw err;
}
else{
var a = result[0];
var resTime = [], resAns = [];
resTime.length = 5;
resAns.length = 5;
a.resTime = resTime;
a.resAns = resAns;
sevenQues.push(a);
if(x == sevenQIDs.length-1) callback();
}
});
}
}
socket.on('socket1', function(text)
{
getQuestions(function(){console.log(sevenQues)});
}