entry.find(function(err,user){
for(var i=0;i<user.length;i++){
if(user[i].tablenumber==-1){
assigntable(user[i]);
}
}
});
私がここでやろうとしているのは、非同期assigntable関数を呼び出す前に各forループが終了するのを待つことです。 Assigntableは、データベースを変更するためのコールバックです。 私は現在、assigntableのコールバックが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
明確にするために - あなたはuser [1]のassigntableが呼び出される前に、user [0]が完了するのを許したいですか?再帰についてのコメントは少し混乱しています。明確にするためにコードを追加できますか? – skav
@skavはいuser [1]のassigntableが完了するまでにユーザー[0]が同意したい場合 –