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秒!
网友评论