这是我的代码: 但是我的变量中没有得到字符串base64。 我需要在这个变量var base64中使用字符串base64。 我见过其他问题,但没有一个问题符合我的要求
<input type:file multiple id="files">
<script>
function listarchivos(){
var base64; //in this variable i need the base64
var selectedFile = document.getElementById("files").files;
var fileToLoad = selectedFile[0];
getBase64(fileToLoad).then(
data => alert(data)
);
}
//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)
});
}
</script>
我已经符合获取作为参数给出的文件的base64字符串的函数,我不能做的是访问该字符串以将其分配给变量并使用它。
我只需要你告诉我如何访问base64链,我只需要一个可以根据需要处理的变量。
I have already tried the following options
var base64 = getBase64(fileToLoad).then(
data => alert(data)
); //this not works
getBase64(fileToLoad).then(
data => base64 = data
); //This not works
getBase64(fileToLoad).then(
data => return{data}
);//this not works
答案 0 :(得分:2)
由于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()
完成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)
或使用如下所示的回调。
等待示例1
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" multiple id="files">
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)
}
等待示例2
<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">
socket