La función de consulta de Firebase dentro de la función devuelve nulo

Estoy tratando de crear una aplicación de seguimiento de asistencia estudiantil con javascript con firebase.

Pero tengo un problema, estoy tratando de consultar dentro de una función y hacer que la función devuelva esos datos.

Pero cuando lo intento, no devuelve nada. 'indefinido'

Aqui esta mi codigo

var root = 'https://path.firebaseio.com';
function initFireSubjects(){
   var db = {};
   db.connection = new Firebase(root + '/subjects');
   db.addSubject = function (year, code, name) {
       this.connection.child(year).push({
           code: code,
           name: name
       });
    };
    db.getAll = function (year) {
        var value;
        this.connection.child(year).on('value', function (snapshot) {
            value = snapshot.val();
        });
        return value;
    };
}

Y aquí está mi código para probarlo

var db = initFireSubjects();
var test = db.getAll('2014');
console.log(test);

La estructura de los datos se ve así

subject:{
    '2014':{
        randomKey1:{
            code:'eng1',
            name:'English 1'
        },
        randomKey2:{
            code:'math1',
            name:'Mathematics 1'
        },
        randomKey3:{
            code:'sci1',
            name:'Science 1'
        }
    },
    '2015':{
        randomKey4:{
            code:'polsci1',
            name:'Political Science 1'
        },
        randomKey5:{
            code:'comprog',
            name:'Computer Programming'
        }
    }
}

El caso es que puedo extraer datos si lo hago así

db.getAll = function(year){
    var value;
    this.connection.child(year).on('value',function(snapshot){
        value = snapshot.val();
        console.log(value);
    }
}

No sé por qué no puede extraer datos de una manera orientada a objetos.

Cualquier entrada?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta