Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将FileReader base64分配到变量中?_Javascript_Jquery_Html_Ajax_Es6 Promise - Fatal编程技术网

Javascript 如何将FileReader base64分配到变量中?

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

我试图打印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.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
,它将暂停执行,直到解决/拒绝相应的承诺。