I expect when I call an async function to resolve promise at the end, not before.
const urls = await uploadImages({ imageChanges, questions });
// ...next step
// I will use urls
But after calling await uploadImages() it continues to run until const data = await fetch(image.src);
And then ...next step starts. How can I make it wait for imageChanges.forEach loop finish ? Should I create another nested function inside ?
const uploadImages = async ({ imageChanges, questions }) => {
    if (!imageChanges.length) return null;
    const storage = firebase.storage();
    let urls; 
    try {
        //** convert each new image's src from blob to downloadUrl. */
        imageChanges.forEach(async image => {
            const questionId = questions.findIndex(q => q.id === image.questionId);
            const imagePath = `${questionId}.jpg`;
            const storageRef = storage.ref(imagePath);
            // ** 
            const data = await fetch(image.src);
            const blob = await data.blob();
            const uploadTaskSnapshot = await storageRef.put(blob);
            const downloadURL = await uploadTaskSnapshot.ref.getDownloadURL();
            urls.push(downloadURL)
        });
        return urls;
    } catch (error) {
        console.log(error.message);
    }
};
 
     
     
    