Node.js - aguarde a conclusão de várias chamadas assíncronas antes de continuar no código

Então, basicamente, eu tenho um loop for com uma função assíncrona. O problema é que o programa apenas continua após o loop e quero que ele espere até que todas as funções assíncronas que foram chamadas no loop sejam concluídas antes que o código continue.

No meu código, "bar" é uma matriz json com outras matrizes json.

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 chamada de função assíncrona é mais ou menos assim:

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;
});

questionAnswers(2)

yourAnswerToTheQuestion