async与await的缺点以及解决

Async/await 让代码看起来是同步的,在某种程度上,也使得它的行为更加地同步。
await 关键字会阻塞其后的代码,直到promise完成,就像执行同步操作一样。它确实可
以允许其他任务在此期间继续运行,但自己的代码被阻塞 ---MDN async和await章节
参考如下实例

function timePromise(time) {
    return new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve();
        }, time);
    });
}
async function test() {
    await timePromise(3000);
    await timePromise(3000);
    await timePromise(3000);
}
let startTime = Date.now();
test().then(() => {
    let finishTime = Date.now();
    let useTime = finishTime - startTime;
    console.log('test用时' + useTime);
}); //test用时9002

//通过以下方式来改善
async function test1() {
    let timePromise1 = timePromise(3000);
    let timePromise2 = timePromise(3000);
    let timePromise3 = timePromise(3000);
    await timePromise1;
    await timePromise2;
    await timePromise3;
}
/*在这里,我们将三个Promise对象存储在变量中,这样可以同时启动它们关联的进程。
接下来,我们等待他们的结果 - 因为promise都在基本上同时开始处理,promise将同
时完成;当运行第二个示例时,您将看到弹出框报告总运行时间仅超过3秒!
*/
test1().then(() => {
    let finishTime = Date.now();
    let useTime = finishTime - startTime;
    console.log('test1用时' + useTime);
}); //test1用时3004

在这里,我们将三个Promise对象存储在变量中,这样可以同时启动它们关联的进程。
接下来,我们等待他们的结果 - 因为promise都在基本上同时开始处理,promise将同
时完成;当运行第二个示例时,您将看到弹出框报告总运行时间仅超过3秒!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容