Firebase Query внутри функции возвращает ноль

Я пытаюсь создать приложение для отслеживания посещаемости студентов с помощью JavaScript с FireBase.

Но у меня есть проблема, я пытаюсь сделать запрос внутри функции, и функция возвращает эти данные.

Но когда я пытаюсь, это ничего не возвращает. «Неопределенный»

Вот мой код

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

И вот мой код, чтобы проверить это

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

Структура данных выглядит следующим образом

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'
        }
    }
}

Дело в том, что я могу получить данные, если я сделаю это так

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

Я не знаю, почему он не может извлекать данные объектно-ориентированным способом.

Любой вклад?

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос