entry.find(function(err,user){
for(var i=0;i<user.length;i++){
if(user[i].tablenumber==-1){
assigntable(user[i]);
}
}
});
所以我在这里尝试做的是在调用异步assigntable函数之前等待每个for循环完成。 Assigntable是对数据库进行更改的回调。 我现在遇到的问题是,在for循环结束后调用assigntable的回调,所有用户都将被分配到表1。 但我想要的是:将第一个分配给表1 - &gt;在下一循环中分配表检测表1被分配 - &gt;用户2分配给表2,依此类推。 我该怎么做?
编辑:Assgintable是一个递归调用,用于在回调中编辑数据库。更新将基于前一循环中生成的数据库的结果,但我在此处不相关。
function assigntable(user,tableindex){
console.log("in recursion with tableindex"+tableindex);
if(tableindex==3)
return;
console.log(user.date+user.time+tableindex);
entry.find({
$and: [
{ "tablenumber": tableindex},
{ "date": user.date },
{"time":user.time}
]
},function(err, result) {
if(result.length==0){
console.log(result+"result is ");
entry.update({"_id":user._id},{"tablenumber":tableindex},function(err, numberAffected) {
if(!numberAffected){
}
else
{
console.log("entryupdated with "+tableindex)
}
});
return;
}
else{
console.log(tableindex);
assigntabe(user,tableindex+1);
}
})
}
答案 0 :(得分:1)
您可以使用async.foreach
来同步迭代:
entry.find(function(err,user){
async.forEach(user, function (item, callback){
if(item.tablenumber==-1){
console.log(item);
assigntable(item,1);
}
callback();
}, function(err) {
console.log('iterating done');
})}).sort({datesubmitted:1});