2016-11-13 4 views
1
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); 
    } 
}) 

}

+0

'assigntable()' 'Promise'を返していますか? – CodingWithSpike

+0

明確にするために - あなたはuser [1]のassigntableが呼び出される前に、user [0]が完了するのを許したいですか?再帰についてのコメントは少し混乱しています。明確にするためにコードを追加できますか? – skav

+0

@skavはいuser [1]のassigntableが完了するまでにユーザー[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}); 
+0

私は試しましたが、動作しません。 forループが終了した後にのみ、assigntable関数のコールバックが開始されます。 –

+0

関連の詳細:http://stackoverflow.com/questions/21184340/async-for-loop-in-node-js –

関連する問題