Como obtenho o URL de download depois que o upload é feito no armazenamento do firebase

Desejo obter o URL de download assim que o upload da imagem for concluído e o downloadURL estiver definido como my newAds.picLink (object.property), mas neste código, pois o upload está em andamento

newAds.update({ picLink: downloadURL });

é chamado, o que gera um erro, pois o downloadURL não está disponível no momento e está em andamento. Resolvi isso usando setTimeOut para 8 segundos, o que permite que a imagem seja carregada completamente primeiro e depois o downloadURL seja recebido, mas isso não está correto.

Como posso criar um retorno de chamada correto que defina newAds.picLink = downloadURL após o upload completo da imagem?

 addSubmitted.addEventListener('click', e => {
 const newAds = _db.ref(userID).push();
 const newAd = {
 };

const ref = firebase.storage().ref();
const file = $('#exampleInputFile').get(0).files[0];
const name = (+new Date() + '-' + file.name);
const task = ref.child(name).put(file, {contentType: file.type});

function abc() {
    task.snapshot.ref.getDownloadURL().then((downloadURL) => {
        console.log('File available at', downloadURL);
        console.log(downloadURL);
        newAds.update({ picLink: downloadURL });
    });

    task.catch(error => {
        // Use to signal error if something goes wrong.
        console.log(`Failed to upload file and get link - ${error}`);
    });
}

setTimeout(abc,8000);

questionAnswers(2)

yourAnswerToTheQuestion