2016-07-17 8 views
0
router.post('/logout', function(req, res) { 
    if(req.body.newList){ 
    var aux= JSON.parse(req.body.newList); 
    var aux1; 
    var i=0; 
    while(i<aux.length){ 
     aux1=aux[i]; 
     Task.findOne({username:aux1.username,text:aux1.text},function(err,res){ 
      if(res){ 
       i++; 
      }else{ 
       task= new Task({username:aux1.username,text:aux1.text,state:aux1.state}); 
       task.save(function(err){ 
        i++; 
       }); 
      } 
     }); 
    } 
} 

これまでのところ、私はこれを持っています。 auxはjsonオブジェクトの配列を格納していますが、_idはありません。必要に応じて1つずつ保存する必要があります。問題は(私の図)非同期なので、このコードは、配列の最後の要素のみをn回だけデータベースに保存します。これは、保存すべき要素の数です(例を参照)。だから、私はmoongose querysの非同期動作が私に頭痛を与えていると思います。おそらく、クエリの結果を待ってから、配列の最後の値で保存することを繰り返します。例えばmoongoseがクエリを終了するのを待つ方法は?

**、私は[{username:'x',text:'a'},{username:'x',text:'aa'},{username:'x',text:'aaa'}]保存のために、これらの値を持っている場合...

それは私がおそらく

答えて

0
彼らは間違って使用..約束を使用してみましたが、それdidn't仕事 [{username:'x',text:'aaa'},{username:'x',text:'aaa'},{username:'x',text:'aaa'}]

を節約

このような場合は、caolan's asyncライブラリを使用することをお勧めします。単に:

npm install asyncモジュールを追加します。

その後で、あなたのコードを置き換える:

router.post('/logout', function(req, res) { 
    if (req.body.newList) { 
     var aux = JSON.parse(req.body.newList); 
     var async = require("async"); 
     async.each(aux, function(aux1, callback) { 

      Task.findOne({ 
       username: aux1.username, 
       text: aux1.text 
      }, function(err, res) { 
       if (res) { 
        callback(); 
       } else { 
        task = new Task({ 
         username: aux1.username, 
         text: aux1.text, 
         state: aux1.state 
        }); 
        task.save(function(err) { 
         callback(); 
        }); 
       } 
      }); 
     }, function(err) { 
      // if any of the query processing produced an error, err would equal that error 
      if (err) { 
       // One of the iterations produced an error. 
       // All processing will now stop. 
       console.log('A query failed to process'); 
      } else { 
       console.log('All queries have been processed successfully'); 
       //do other things here 
      } 
     }); 
    } 
}); 
+1

は素晴らしい仕事を..ありがとうございました! –

関連する問題