Вы либо не понимаете как работает nodejs, либо не точно формулируете вопрос.
По поводу того, что у вас написано:
for(var i=0; i<20; i++) {
events.emit('test', '...'); // при первой итерации емитится событие
}
events.on('test', function(data) {
console.log('START');
// если бы здесь был асинхронный вызов(обращение к бд/запрос на удалённый сервер и тд),
// то проблем бы не было
var sl = sleep(random.integer(1000, 5000)); // разобрана ниже
sleep(sl);
console.log('END AFTER ' + sl);
});
function sleep(milliseconds) { // функция вызываемая внутри события,
// она выполняется в основном потоке(для nodejs он один!), и соответсвенно блокирует(!)
// поток выполнения, поэтому у вас не срабатываю остальные вызовы функции.
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds) break;
}
}
По комменту
Он может быть ТОЛЬКО синхронным
быть такого не может.
Но вообще посмотрите ещё на
setImmidiate