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

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);
})();

TA貢獻1998條經驗 獲得超6個贊
getFileSize(filename1, (value1) => {
getFileSize(filename2, (value2) => {
callback(value1 + value2)
})
})
添加回答
舉報