JavaScript asignando valor a la variable desde el retorno de devolución de llamada (sincronización)

Tengo problemas para asignar el valor de retorno de la función de llamada de Firebase a mi variable global. Esta es mi función:

  function getThePushNameById( path , id ){
    path.once( 'value', function( data ){ 
        if( data.child('id').val() != id ){
            data.forEach( function( newData ){
                var base = new Firebase( path.child( newData.name() ).toString() );
                getThePushNameById( base, id );
            })
        }else{
            //finishes the function when path is founded - returns the value
            return path.name();
        }       
    })
}

y este es el otro archivo donde configuré la solicitud:

var base = new Firebase(path/to/my/base);

var output = getThePushNameById( base , 2 )
console.log(output);

Entonces mi problema es queconsole.log no espera aoutput por definir, pero se ejecuta solo y registraundefined. Y mi pregunta es si alguien sabe cómo puedo hacerconsole.log esperar por el valor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta