gpt4 book ai didi

node.js - Node Mongoose 在循环中查找查询不起作用

转载 作者:IT老高 更新时间:2023-10-28 13:18:29 26 4
gpt4 key购买 nike

我正在尝试从循环中的 mongoose 获取记录。但它没有按预期工作。我有一系列带有问题和答案的哈希,我正试图从我的数据库中找到这些问题。这是我的循环:

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)
quiz.where("question",question_to_find).exec(function(err,results)
{
console.log(results)
if (ans == "t")
{
user_type = results.t
}
else if (ans == "f")
{
user_type=results.f
}
})
}

终端的结果类似于:

0
t
1
f
[ { question: 'i was here',
_id: 5301da79e8e45c8e1e7027b0,
__v: 0,
f: [ 'E', 'N', 'F' ],
t: [ 'E', 'N', 'F' ] } ]
[ { question: 'WHo r u ',
_id: 5301c6db22618cbc1602afc3,
__v: 0,
f: [ 'E', 'N', 'F' ],
t: [ 'E', 'N', 'F' ] } ]

问题是我的问题在循环迭代后显示。因此,我无法处理它们。

请帮忙!问候

最佳答案

欢迎来到 async-land :-)

使用 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 code that should happen after the loop here
});

另外我推荐学习this blog .它包含两个进一步的异步循环阶梯。很有帮助也很重要。

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);
}

关于node.js - Node Mongoose 在循环中查找查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21829789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com