Llamadas asincrónicas y recursividad con Node.js

Estoy buscando ejecutar una devolución de llamada cuando se complete por completo una función recursiva que puede continuar durante un período de tiempo indeterminado. Estoy luchando con problemas asincrónicos y esperaba obtener ayuda aquí. El código, usando elrequest módulo, es el siguiente:

var start = function(callback) {
  request.get({
    url: 'aaa.com'
  }, function (error, response, body) {
    var startingPlace = JSON.parse(body).id;
    recurse(startingPlace, callback);
  });
};

var recurse = function(startingPlace, callback) {
    request.get({
        url: 'bbb'
    }, function(error, response, body) {
        // store body somewhere outside these funtions
        // make second request
        request.get({
            url: 'ccc'
        }, function(error, response, body) {
            var anArray = JSON.parse(body).stuff;
            if (anArray) {
                anArray.forEach(function(thing) {
                    request.get({
                        url: 'ddd'
                    }, function(error, response, body) {
                        var nextPlace = JSON.parse(body).place;
                        recurse(nextPlace);
                    });
                })
            }
        });
    });
    callback();
};

start(function() {
    // calls final function to print out results from storage that gets updated each     recursive call
    finalFunction();
});

Parece que una vez que mi código pasa elfor repite las solicitudes anidadas, continúa fuera de la solicitud y finaliza la llamada de función inicial mientras las llamadas recursivas continúan. Quiero que no termine la iteración de nivel más alto hasta que se hayan completado todas las llamadas recursivas anidadas (que no tengo forma de saber cuántas hay).

¡Cualquier ayuda es muy apreciada!

Respuestas a la pregunta(5)

Su respuesta a la pregunta