entry.find(function(err,user){
for(var i=0;i<user.length;i++){
if(user[i].tablenumber==-1){
assigntable(user[i]);
}
}
});
так что я пытаюсь сделать здесь, чтобы дождаться завершения каждого цикла цикла до вызова асинхронной функции присваивания. Assigntable - это обратный вызов для внесения изменений в базу данных. Проблема, с которой я столкнулся сейчас, - это то, что вызов calltable вызывается после завершения цикла for, все пользователи будут назначены таблице 1. Но я хочу: назначить первый для таблицы 1 -> назначить таблицу в следующем цикле определяет таблицу 1 назначается -> пользователь 2, назначенный таблице 2 и т. д. Как это сделать?Как заставить цикл for ждать завершения обратного вызова в nodejs?
Редактировать: 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);
}
})
}
ли 'assigntable()' 'возвращать Promise'? – CodingWithSpike
просто для уточнения - вы хотите назначить для пользователя [0] до завершения назначения для пользователя [1]? комментарий о рекурсии также немного запутан, вы можете включить больше кода для уточнения? – skav
@skav yes Я хочу назначить для пользователя [0], чтобы закончить до назначения для пользователя [1], называется –