Javascript 将数据从一个异步函数传递到另一个异步函数时出现问题

Javascript 将数据从一个异步函数传递到另一个异步函数时出现问题,javascript,asynchronous,file-upload,async-await,callback,Javascript,Asynchronous,File Upload,Async Await,Callback,我试图用json加载一幅图片,并将该json传递给另一个异步函数。但我感到困惑,无法理解如何将值传递给create(json)函数。如果有任何帮助,我将不胜感激 异步函数send(){ 让form=newformdata(document.querySelector('form'); 让json=wait构造_json(形式,数据=>{ 返回数据; }); 等待创建(json);//问题是我无法将json传递给此函数 } 函数getBase64(文件,回调){ let reader=new Fi

我试图用json加载一幅图片,并将该json传递给另一个异步函数。但我感到困惑,无法理解如何将值传递给
create(json)
函数。如果有任何帮助,我将不胜感激

异步函数send(){ 让form=newformdata(document.querySelector('form'); 让json=wait构造_json(形式,数据=>{ 返回数据; }); 等待创建(json);//问题是我无法将json传递给此函数 } 函数getBase64(文件,回调){ let reader=new FileReader(); reader.onload=函数(e){ 回调(如target.result); }; reader.onloadend=函数(e){ 返回e.target.result; }; 返回reader.readAsDataURL(文件); } 异步函数构造\u json(表单,回调){ 让数据=等待getBase64(form.get(“picture”),数据=>{ 让json={ 图片:数据 }; 回调(json); }); }
使用回调或承诺。。。尝试使用这两种方法是代码气味

async function send() {
    let form = new FormData(document.querySelector('form'));
    let json = await construct_json(form);
    await create(json); //The problem is I cannot pass json to this function
}

function getBase64(file) {
    return new Promise(resolve => {
        let reader = new FileReader();
        reader.onloadend = function (e) {
            resolve(e.target.result);
        };
        reader.readAsDataURL(file);
    });
}

async function construct_json(form) {
    let picture = await getBase64(form.get("picture"));
    return {picture};
}

json
未定义的
,因为
construct\u json
不返回任何内容,所以
reader.readAsDataURL
不返回承诺。。。因此,您的
getBase64
也是wrong@JaromandaX您有什么建议可以解决这个问题吗?首先加载映像,然后在加载映像时将其传递给另一个异步任务。您需要了解不要在同一个函数中同时使用回调和承诺(异步/等待)语法。。。您可以在函数send和construct_json中执行此操作…谢谢,它成功了!您可以通过删除函数参数中的回调来改进这个答案。@Helen-是的,我忘了更改:p