Javascript 将数据从一个异步函数传递到另一个异步函数时出现问题
我试图用json加载一幅图片,并将该json传递给另一个异步函数。但我感到困惑,无法理解如何将值传递给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
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