I have two functions
async function convertToBase64(file) { const fileReader = new FileReader(); fileReader.onload = () => { const srcData = fileReader.result; console.log('scrData: ', srcData); // result is correct return srcData; }; fileReader.readAsDataURL(file); } async function addData(values) { const converted = await convertToBase64(values.file); console.log(converted); // result undefined await addDoc(collection(db, 'list'), { image: converted, }); }
I tried try...catch and async-await functions, but I couldn't find a solution anyway
P粉4360523642024-04-02 11:48:48
The
convertToBase64()
function does not explicitly return an value, so the code you provide always returns undefined
. You can change the function so that it returns a Promise once resolves " rel="nofollow noreferrer">FileReader Successfully read the file in base64 and handled any reject
ions or occurrences of mistake:
const imgFileInput = document.getElementById("img"); imgFileInput.addEventListener("change", addData); function convertToBase64(file) { return new Promise((resolve) => { const fileReader = new FileReader(); fileReader.onload = () => { const srcData = fileReader.result; resolve(srcData); }; fileReader.onerror = (error) => { reject(error); }; fileReader.readAsDataURL(file); }); } async function addData() { try { const imgFile = imgFileInput.files[0]; const converted = await convertToBase64(imgFile); console.log(converted); } catch (error) { console.error("Error while converting to Base64:", error); } }