欢迎来到异步世界:-)
使用Javascript,除了您的代码外,任何其他事情都会并行发生。这意味着在您的特定情况下,无法在循环结束之前调用回调。您有两种选择:
a)将循环从同步for循环重写为异步递归循环:
function asyncLoop( i, callback ) { if( i < answers.length ) { console.log(i) var question_ans = eval('(' + answers[i]+ ')'); var question_to_find = question_ans.question.toString() var ans = question_ans.ans.toString() console.log(ans) quiz.where("question",question_to_find).exec(function(err,results) { console.log(ans, results) if (ans == "t") { user_type = results.t } else if (ans == "f") { user_type=results.f } asyncLoop( i+1, callback ); }) } else { callback(); }}asyncLoop( 0, function() { // put the pre that should happen after the loop here});另外,我建议您学习此博客。它在异步循环阶梯上又包含两个步骤。非常有帮助,非常重要。
b)将您的异步函数调用放入格式为闭包的
(function( ans ) {})(ans);并提供您要保留的变量(此处:)
ans:
for (var i=0;i < answers.length;i++) { console.log(i) var question_ans = eval('(' + answers[i]+ ')'); var question_to_find = question_ans.question.toString() var ans = question_ans.ans.toString() console.log(ans) (function( ans ) { quiz.where("question",question_to_find).exec(function(err,results) { console.log(ans, results) if (ans == "t") { user_type = results.t } else if (ans == "f") { user_type=results.f } }) })(ans);}


