亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步后如何調用同步代碼

異步后如何調用同步代碼

森欄 2022-12-02 16:54:18
我有一個函數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);?
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

您可以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 中的代碼。


查看完整回答
反對 回復 2022-12-02
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

使用承諾,等待/異步


// Work to do

const 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);

})();


查看完整回答
反對 回復 2022-12-02
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

getFileSize(filename1, (value1) => {

    getFileSize(filename2, (value2) => {

      callback(value1 + value2)

    })

})


查看完整回答
反對 回復 2022-12-02
  • 3 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號