Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 异步后如何调用同步代码_Javascript - Fatal编程技术网

Javascript 异步后如何调用同步代码

Javascript 异步后如何调用同步代码,javascript,Javascript,我有一个函数sumFileSizes(),它接受两个文件的名称,调用在第三个参数中传递的函数,并将它们的大小之和作为第一个参数传递给它。 有一个异步函数来获取文件ramzergetFileSize() 如何在处理const sum=getFileSize(filename1,cb)+getFileSize(filename2,cb)之后调用回调?使用承诺,等待/异步 //要做的工作 常量工时=(参数)=>{ 返回新承诺((解决、拒绝)=>{ //做一些耗时的事情 设置超时(()=>{ //完成

我有一个函数
sumFileSizes()
,它接受两个文件的名称,调用在第三个参数中传递的函数,并将它们的大小之和作为第一个参数传递给它。 有一个异步函数来获取文件ramzer
getFileSize()


如何在处理
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)
    })
})