私は通常、イベント エミッターを使用してすべてを同期させるだけなので、非同期環境の考え方の中で作業することができます。以下の私のコードでは、DNS 解決が完了するたびに、検索機能によってリッスンされるイベントが生成され、新しい検索を起動するように通知されます。さらに、独自の Event Emitters を作成する方法を学ぶことができます。これはすばらしいものです。
ドメイン名配列の特定のサイズに対して非同期にしたい場合は、分母変数を作成し、モジュラス演算子を使用して非同期をチャンクで送信し、モジュラスが0.
// program that uses event emitters to create sync code in an async env
var dns = require('dns') //dns from core
var eventEmitter = require('events').EventEmitter //Event Emitter from core
var ee = new eventEmitter; //make an Event Emitter object
var queries = ['yahoo.com','google.com','james.com'];
ee.on('next', next_search); //create a listener for an event we define
// our listening function that executes on our defined 'next' event
function next_search() {
search(queries[a]);
if(queries.length == a) process.exit(0);
++a;
}
// the actual search function that uses DNS
function search(x) {
dns.resolve(x, function (err) {
if (!err) {
//res.send("bad");
console.log('bad: ' + x)
ee.emit('next')
} else {
//res.send("good");
console.log('good: ' + x)
ee.emit('next')
}
});
}
// global variable to keep track of our name queue length
var a = 0;
// kick it all off
next_search()