异步后如何调用同步代码

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


function getFileSize(filename, cb) {

  setTimeout(() => cb(fileSizes[filename]), Math.random() * 500);

}


function sumFileSizes(filename1, filename2, cb) {

    const sum = getFileSize(filename1, cb) + getFileSize(filename2, cb);

    setTimeout(cb(sum), Math.random() * 550)

}

处理后如何调用回调const sum = getFileSize(filename1, cb) + getFileSize(filename2, cb);?


森栏
浏览 130回答 3
3回答

互换的青春

您可以promisify使用您的代码,然后使用async..await.function getFileSize(filename) {  return new Promise((resolve) => {    setTimeout(() => resolve((fileSizes[filename])), Math.random() * 500);  });}async function sumFileSizes(filename1, filename2) {    const size1 = await getFileSize(filename1, cb);    const size2 = await getFileSize(filename2, cb);    return size1 + size2;}请注意,异步函数返回一个promise,因此您需要执行以下操作:sumFileSize(filename1, filename2).then(cb); // cb is callback function另请注意,这async..await是一项新功能,在旧版浏览器中将不支持。您可能必须使用转译器babel来转换 ES5 中的代码。

慕侠2389804

使用承诺,等待/异步// Work to doconst work = (param) => {  return new Promise((resolve, reject) => {    // Do some time consuming stuff    setTimeout(() => {      // When done, resolve      resolve(param * param);    }, 3000);  });}// Run async function(async () => {  // Run worker and wait till finish  const result = await work(3);    // Use result  const finalResult = result * 2;    // Log  console.log(finalResult);})();

米琪卡哇伊

getFileSize(filename1, (value1) => {    getFileSize(filename2, (value2) => {      callback(value1 + value2)    })})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript