Javascript 如何将FileReader base64分配到变量中?
我试图打印base46数据,它来自:Javascript 如何将FileReader base64分配到变量中?,javascript,jquery,html,ajax,es6-promise,Javascript,Jquery,Html,Ajax,Es6 Promise,我试图打印base46数据,它来自: var fileData; var files = document.getElementById('pickUpFileAttachment').files; if (files.length > 0) { var promise = getBase64(files[0]); promise.then(function (result) { fileData = result; console.lo
var fileData;
var files = document.getElementById('pickUpFileAttachment').files;
if (files.length > 0) {
var promise = getBase64(files[0]);
promise.then(function (result) {
fileData = result;
console.log(result);
});
}
function getBase64(file, onLoadCallback) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.onload = function () {
resolve(reader.result);
};
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
在console.log(result)
中,数据存在,但当我将其分配给fileData
并在getBase64()
函数结束后尝试对其进行控制台时,我得到了未定义的
。如何将base64数据分配给变量
console.log("displaying the 64base data");
console.log(fileData);
它只显示了fileData
值的undefined
。
在
getBase64()的末尾,
函数fileData
尚未分配,因为此时尚未调用
承诺回调
唯一设置和定义它的地方是promise的回调。然后。正如您所说的,您确实可以在console.log(result)
中获取数据
您应该熟悉异步JS,以下是一些文章:
在getBase64()的末尾,
函数fileData
尚未分配,因为此时尚未调用
承诺回调
唯一设置和定义它的地方是promise的回调。然后。正如您所说的,您确实可以在console.log(result)
中获取数据
您应该熟悉异步JS,以下是一些文章:
Promise是异步的,您似乎希望同步检索文件数据。在这种情况下,如果执行了fileData
,但您的承诺没有解决,则会导致它异步。在这种情况下,您可以使用wait
var fileData=await getBase64(files[0]).catch(err=>{console.log(err});
承诺是异步的,您似乎希望同步检索fileData
。在这种情况下,当执行fileData
但您的承诺没有解决时,会导致异步。在这种情况下,您可以使用await
var fileData=await getBase64(文件[0]).catch(err=>{console.log(err});
我认为您不了解异步编程模型,您没有在函数定义之后计算base64,否则使用promises有什么意义?另外,如果pickUpFileAttachment
是一个文件输入,您应该听onChange事件,我认为您不了解异步编程在使用模型时,您没有在函数定义之后立即计算base64,否则使用promises有什么意义?另外,如果pickUpFileAttachment
是一个文件输入,您应该收听onChange事件。请注意,从技术上讲await
不会同步执行-它只会简化语法。[房车]=等待表达式;
表达式:承诺或任何要等待的值。rv:返回承诺的已实现值,如果不是承诺,则返回值本身。您只能在async
函数中使用wait
,它将暂停执行,直到相应的承诺得到解决/拒绝。请注意,从技术上讲wait
不同步执行-它只简化语法。[rv]=等待表达式;
表达式:承诺或任何要等待的值。rv:返回承诺的已实现值,如果不是承诺,则返回值本身。您只能在async
函数中使用wait
,它将暂停执行,直到解决/拒绝相应的承诺。