2017-09-21 6 views

答えて

2

カウンターをつけてください。 例:他の答えが言うように

const table = [1, 2, 3]; 
const counter = 0; 

const done =() => { 
    console.log('foreach is done'); 
} 

table.forEach((el) => { 
    doSomeAsync((err, result) => { 
     counter++; 
     if (counter === 3) { 
     done(); 
     } 
    }); 
}); 

は、あなたが本当に良いです非同期パッケージを使用することができます。しかし、そのためにはPromisesを使用し、Vanila Promise.all()を使用することをお勧めします。例:

const table = [1, 2, 3]; 

Promise.all(table.map((el) => { 
    return new Promise((resolve, reject) => { 
     doSomeAsync((err, result) => { 
      return err ? reject(err) : resolve(result); 
     }); 
    }); 
})) 
.then((result) => { 
    // when all calls are resolved 
}) 
.catch((error) => { 
    // if one call encounters an error 
}); 
1

この場合、Asyncライブラリを使用できます。それは様々な有用なユーティリティ関数を持っています。

タスクのセットを実行するために使用できるキュー機能があり、必要な操作を実行できるすべてのタスクが実行されたときにコールバックを取得します。また、キューの並行性(並行して同時に実行されるタスクの数)を制御することもできます。ここで

// create a queue object with concurrency 2 
var q = async.queue(function(task, callback) { 
    console.log('hello ' + task.name); 
    callback(); 
}, 2); 

// The callback function which is called after all tasks are processed 
q.drain = function() { 
    console.log('all tasks have been processed'); 
}; 

// add some tasks to the queue 
q.push({name: 'foo'}, function(err) { 
    console.log('finished processing foo'); 
}); 
q.push({name: 'bar'}, function (err) { 
    console.log('finished processing bar'); 
}); 
+0

コード - サンプルはそうですが、悲しいことに、私は、並行性を知りません。 – skiilaa

+0

次に、同時実行性1を使用します。これは、タスクを順番に実行します。 – codeslayer1

関連する問題