我有两个功能
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,
});
}
我试过try...catch, async-await函数,但我还是找不到解决方案
convertToBase64()
函数不会显式return 值,因此您提供的代码总是返回undefined
。您可以更改函数,使其返回一个 Promise,一旦 FileReader成功读取 base64 中的文件,它就会返回一个
resolve
s,并处理任何 reject
ions 或 errors 发生:
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);
}
}
<input type="file" id="img" />