【发布时间】:2014-05-23 20:41:17
【问题描述】:
我一直在尝试在节点 js 中执行 for 循环后获取变量的值。但它显示为未定义。但是当我在 5000 毫秒后调用 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 是一个全局变量,我在控制台中没有定义。但是当我把这个 设置超时(函数() { 控制台.log(sevenQues); },5000);
我得到了想要的价值。请帮我解决这个问题,我听说有一些 async.js 文件可以执行 foreach 循环来发送所需的输出。但我无法完成这项工作。任何帮助将不胜感激。
【问题讨论】:
-
经典。是异步调用,你需要使用回调来确保你在最后一次推送后访问sevenQues
标签: javascript node.js callback socket.io