Поскольку Promise
делает функцию асинхронной, следующий код будет запускать getBase64()
и непрерывно выполнять console.log(base64)
, который еще не определен.
function listarchivos() {
base64; //in this variable i need the base64
var selectedFile = document.getElementById("files").files;
var fileToLoad = selectedFile[0];
getBase64(fileToLoad).then(
data => {
base64 = data;
}
);
console.log(base64) // undefined
}
Так что вам следует await
для getBase64()
сделать или использовать обратный вызов, как показано ниже.
дождаться примера 1
async function listarchivos() {
var base64; //in this variable i need the base64
var selectedFile = document.getElementById("files").files;
var fileToLoad = selectedFile[0];
await getBase64(fileToLoad).then(
data => {
alert(data);
base64 = data;
}
);
console.log(base64)
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
return Promise.resolve(reader.result)
});
}
$('#files').on('change', listarchivos)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">
дождаться примера 2
async function listarchivos() {
var base64; //in this variable i need the base64
var selectedFile = document.getElementById("files").files;
var fileToLoad = selectedFile[0];
base64 = await getBase64(fileToLoad).then(
data => {
return data;
}
);
console.log(base64)
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
return Promise.resolve(reader.result)
});
}
$('#files').on('change', listarchivos)
function DoSomething() {
console.log(base64)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">
обратный вызов
var base64;
function listarchivos() {
var selectedFile = document.getElementById("files").files;
var fileToLoad = selectedFile[0];
getBase64(fileToLoad).then(
data => {
base64 = data;
DoSomething()
}
);
}
//This is my function for get base64, but not return the string base64
function getBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
return Promise.resolve(reader.result)
});
}
$('#files').on('change', listarchivos)
function DoSomething() {
console.log(base64)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">