JavaScript异步/等待功能出现问题

我是JS的初学者,目前正在做一个项目,该项目是从Firebase Realtime DB提取基本信息的。我有一个函数可以检查数据库中有多少个项目,而另一个可以获取特定的值。当我检查它们在这些方法内返回的值时,它很好-当我在其他地方调用它们时,就会出现问题。我相信这是由于这些函数的异步性质。我不确定如何构造它们以避免出现此问题。我知道我需要使用Promises和.then函数,但不确定如何使用。这是我的两个功能:

var urls = [];
function gotData(data){ 
var number = randomNumberGenerator(); 
dbRefObject.once('value', function(snapshot){         
snapshot.forEach(function(childSnapshot){ 
        var childData = childSnapshot.val().URL; 
        urls.push(childData); })}) }

和:

function randomNumberGenerator(){
    dbRefObject.on('value',(snap)=>{ 
        var totalRecord =  snap.numChildren();         
    console.log(Math.floor(Math.random() * totalRecord)); }); }

当我将console.log语句放入这些方法中时,它们可以正常工作-当我在其他地方调用它们时,就会出现问题。例如,当我在其他地方调用urls数组时,它会返回除“ undefined”以外的任何内容。我将非常感谢您的帮助。