2017-06-13 9 views
0

async.Eachが完了したときにどのように検出するかは、パラメータにロードされたすべてのオブジェクト/アレイをループします。 ALL FINISHログを呼び出す方法。nodejs mongodb async.Each done

db.collection('tests').find(query).limit(10).toArray(function(err, db_results) { 
    console.log("count: "+db_results.length); 

    async.each(db_results, function (db_resultsx, cb) { 
     db_resultsx._id = db_resultsx._id.toString(); 
     db_resultsx.xdate_visited = moment(db_resultsx.date_visited).format("YYYY-MM-DD hh:mm:ss"); 
     documents.push(db_resultsx); 

    }, function(documents) { 
      console.log(documents); 
      console.log(documents.length); 
      console.log("ALL FINISH"); 
      process.exit(); 
    }); 

}); 

答えて

1

それが実行されているはずのコードが非同期ではないことを考えるとasync.each()を使用する理由はありません。

代わりに、あなたは.map()を使用することができます。

db.collection("tests").find(query).limit(10).toArray(function(err, db_results) { 
    console.log("count: " + db_results.length); 

    let documents = db_results.map(function(db_resultsx) { 
    db_resultsx._id = db_resultsx._id.toString(); 
    db_resultsx.xdate_visited = moment(db_resultsx.date_visited).format(
     "YYYY-MM-DD hh:mm:ss" 
    ); 
    return db_resultsx; 
    }); 

    console.log(documents); 
    console.log(documents.length); 

    curl(URL, { data : documents }, function(err) { 
    console.log("ALL FINISH"); 
    process.exit(); 
    }); 
}); 
+0

私はそれがそれぞれのループが終了した後、私は新しいドキュメントを介して送信するために、カールを行い、指定のdidnt。 – Boy

+0

@Boyは、_all_文書が処理された後、または各文書ごとにカールを実行することを意味しますか? – robertklep

+0

すべての文書が処理された後 – Boy

2

async.each機能が仕上げされていないことを理由にコールバックが二関数内で呼び出されていないということです。私はmongoの呼び出しを使わず簡単な例を使ってスナップを作成しましたが、代わりにタイムアウトを使用しました。

https://caolan.github.io/async/docs.html#eachを見ると、2番目の引数は実行中のコードの終了を示すためにコールする必要があるコールバック(コード内ではこれは値cb)です。

function delayedReturn(callback) { 
 
    setTimeout(function(){ 
 
    console.log('timeout complete'); 
 
    callback(false, ['first value']); 
 
    }, 1000); 
 
} 
 
var documents = []; 
 
delayedReturn(function(err, db_results) { 
 

 
    async.each(db_results, function (dbResult, cb) { 
 
     
 
     documents.push(dbResult); 
 
     console.log('documents pushed', dbResult) 
 
     cb(); 
 

 
    }, function(error) { 
 
     if(error) 
 
     { 
 
      console.error(error); 
 
     } 
 
      
 
    }); 
 
});
<script src="https://rawgit.com/caolan/async/master/dist/async.min.js"></script>