Javascript 异步后如何调用同步代码
我有一个函数Javascript 异步后如何调用同步代码,javascript,Javascript,我有一个函数sumFileSizes(),它接受两个文件的名称,调用在第三个参数中传递的函数,并将它们的大小之和作为第一个参数传递给它。 有一个异步函数来获取文件ramzergetFileSize() 如何在处理const sum=getFileSize(filename1,cb)+getFileSize(filename2,cb)之后调用回调?使用承诺,等待/异步 //要做的工作 常量工时=(参数)=>{ 返回新承诺((解决、拒绝)=>{ //做一些耗时的事情 设置超时(()=>{ //完成
sumFileSizes()
,它接受两个文件的名称,调用在第三个参数中传递的函数,并将它们的大小之和作为第一个参数传递给它。
有一个异步函数来获取文件ramzergetFileSize()
如何在处理
const sum=getFileSize(filename1,cb)+getFileSize(filename2,cb)之后调用回调代码>?使用承诺,等待/异步
//要做的工作
常量工时=(参数)=>{
返回新承诺((解决、拒绝)=>{
//做一些耗时的事情
设置超时(()=>{
//完成后,解决问题
解析(param*param);
}, 3000);
});
}
//运行异步函数
(异步()=>{
//运行工人并等待完成
施工结果=等待工作(3);
//使用结果
const finalResult=结果*2;
//日志
控制台日志(最终结果);
})();代码>您可以提示您的代码,然后使用async..wait
函数getFileSize(文件名){
返回新承诺((解决)=>{
setTimeout(()=>resolve((fileSizes[filename])),Math.random()*500;
});
}
异步函数sumFileSizes(filename1、filename2){
const size1=等待getFileSize(filename1,cb);
const size2=等待getFileSize(filename2,cb);
返回size1+size2;
}
请注意,异步函数返回一个承诺
,因此您需要执行以下操作:
sumFileSize(filename1,filename2)。然后(cb);//cb是回调函数
还要注意,async..await
是一项新功能,在旧浏览器中不支持。您可能必须使用类似于babel
的transpiler来转换ES5中的代码。方法是将其余代码放在回调中。在这种情况下,您需要getFileSize(filename1,…)
并在该回调中放入getFileSize(filename2,…)
,在该回调中放入setTimeout
。或者更好(更简单、更稳定、更少混乱),重写代码以使用async
/await
。您应该查看await/async关键字,getFileSize函数应该返回一个承诺,以预期值解析。另一方面,SumfileSize应该是一个异步函数,您可以等待getFileSize使用await关键字解析。getFileSize甚至不返回任何内容这是否回答了您的问题@CherryDT不需要使用异步等待。我认为这个选项会起作用=>getFileSize(filename1,()=>{getFileSize(filename2,()=>{cb(filename1+filename2)})
但如何保持总和?@Tapx我不需要使用async/await。您只需要在setTimeout()之后调用回调函数
I不需要使用async/await。您只需在setTimeout()之后调用回调函数
getFileSize(filename1, (value1) => {
getFileSize(filename2, (value2) => {
callback(value1 + value2)
})
})
getFileSize(filename1, (value1) => {
getFileSize(filename2, (value2) => {
callback(value1 + value2)
})
})