第32题:Promise、await相关问题

题目

下面代码的执行结果:

function wait() {
  return new Promise(resolve =>
    setTimeout(resolve, 10 * 1000)
  )
}

async function main() {
  console.time();
  const x = wait();
  const y = wait();
  const z = wait();
  await x;
  await y;
  await z;
  console.timeEnd();
}
main();

解析:
new Promise相当于同步任务,后面的then才是微任务。
const x = wait();
const y = wait();
const z = wait();
这三个都是同步任务,同时返回一个Promise对象,对象里面都有一个setTimeout。所以几乎同时执行setTimeout。再执行各自的await任务,所以时间差不多10s。

变形:

function wait() {
  return new Promise(resolve =>
    setTimeout(resolve, 10 * 1000)
  )
}

async function main() {
  console.time();
  await wait();
  await wait();
  await wait();
  console.timeEnd();
}
main();

不同于上题了,await后面必须执行完,才能执行下一条语句,所以时间差不多为30s.

发布了229 篇原创文章 · 获赞 169 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41257129/article/details/103783931
今日推荐