You can use the standard FileReaderSync, which is a simpler, synchronous, blocking version of the FileReader API, similar to what you are already using:
let reader = new FileReaderSync();
let result_base64 = reader.readAsDataURL(file);
console.log(result_base64); // aGV5IHRoZXJl...
Keep in mind though that this is only available in worker threads, for obvious reasons.
If you need a solution for the main thread that "reads like" a synchronous API, i.e. sequentially, you can wrap the async FileReader in a promise and use async functions (you might need to transpile):
async function readFileAsDataURL(file) {
let result_base64 = await new Promise((resolve) => {
let fileReader = new FileReader();
fileReader.onload = (e) => resolve(fileReader.result);
fileReader.readAsDataURL(file);
});
console.log(result_base64); // aGV5IHRoZXJl...
return result_base64;
}
And then you can either await this function in another async context:
async function main() {
let file = new File(...)
let dataURL = await readFileAsDataURL(file)
console.log(dataURL); // aGV5IHRoZXJl...
}
... or just consume it using promise callbacks (doesn't need an async context):
readFileAsDataURL(file).then(dataURL => {
console.log(dataURL); // aGV5IHRoZXJl...
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…