ユーザーのループをループするループがありますが、このループは非同期です。すべてのユーザーが新しい文書を作成して保存し、保存するのを待っています次のユーザーに移動します。私は次のユーザーに移動するときに対処できるので、私の問題は新しい文書データを保存するときです。私はmongoose saveメソッドを使用しています。関数を続行する前に保存を待つ
主な機能は、ループを実行しています、ここではサンプルです。 注: '非同期' は非同期モジュールv2.6.0で
async.forEach(users, (user, callback)=>{
console.log(`Checking ${user.first_name}`);
createNewDocument(user, (err)=>{
if(!err) {
console.log("New document created.");
callback();
}
}, (err)=>{
if(!err){
console.log("All users were updated");
}
});
}
非非同期メソッド
users.forEach((user)=>{
console.log(`Checking ${user.first_name}`);
createNewDocument(user, (err)=>{
if(!err) {
console.log("New document created.");
}
});
});
createNewDocument機能
function createNewDocument(user, callback)
{
console.log("Creating a new doc...");
let doc = new Doc();
doc.save((err)=>{
if(!err){
console.log(`New doc created for user ${user.first_name}`);
callback;
}
});
console.log("Creating a new doc finished executing...");
}
すべてを実行し、最後にされます私がログに記録するのは、すべてのユーザーのために「ユーザーのために作成された新しい文書....」の束です。 私は非常に多くのことをやってみましたが、doc.saveを約束してみましたが、うまくいきませんでした。
編集:次のユーザーに移動する前に新しい文書を作成することが重要です。これらの文書を呼び出し配列に追加して実行する必要はありません。以前の文書をチェックする必要がありますループが次回に入ったときに実際に存在し、そこからデータを取り出す
:あなたは次の操作を行うことができます約束を使用
。では、なぜ非同期ループを使用していますか?非同期の全体が待たされることはありません。 – gforce301
以前は非同期ループを使用していましたが、誰かが非同期を使用するように提案してから、asyncが待機しないようにするまで、同じ問題が発生し、コールバックによって制御されるとのことでした。 –
"コールバック"は実際に非同期動作とは関係ありません。コールバックを使用する同期関数はたくさんあります。ネイティブ 'Array.forEach'は1つを使用します。 – gforce301