Node.js: espere a que finalicen varias llamadas asíncronas antes de continuar en el código

Así que básicamente tengo un bucle for con una función asincrónica. El problema es que el programa solo continúa después del ciclo y quiero que espere hasta que todas las funciones asíncronas que se llamaron en el ciclo hayan finalizado antes de que el código continúe.

En mi código "bar" hay una matriz json con otras matrices json en ella.

function write(bla) { // gets called one after another

  for(var url in bla) {
    asyncFunctionCall(url); // Executed about 50 times, it has to run parallel
  }
  // Wait for all called functions to finish before next stuff happens and
  // write gets called again.

}

for(var foo in bar) {
  // Here i parse the json array "foo" which is in the json array "bar"
  write(foo[bla]); // bla is an array of multiple urls.
}

a llamada a la función asíncrona se ve más o menos así:

var request = require('request');

request(url, function (error, response, body) {
  if(typeof response !== 'undefined') {
    if((response.statusCode >= 400 && response.statusCode <= 451)
    || (response.statusCode >= 500 && response.statusCode <= 511))
      return true;
    return false;
  }
  return false;
});

Respuestas a la pregunta(2)

Su respuesta a la pregunta