javascript Async await 3 promise似乎是并行运行的,发生了什么?

jqjz2hbq  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(63)

此问题在此处已有答案

When is the body of a Promise constructor callback executed?(4个回答)
2天前关闭。
我有3个使用new Promise()构造函数创建的promise,在5000 ms的延迟后,promise解析。
在函数runPromises()中,我等待这3个promise,而不使用Promise.all()。

const promise1 = new Promise((resolve) => {
  setTimeout(() => {
    resolve(1);
  }, 5000);
});

const promise2 = new Promise((resolve) => {
  setTimeout(() => {
    resolve(2);
  }, 5000);
});

const promise3 = new Promise((resolve) => {
  setTimeout(() => {
    resolve(3);
  }, 5000);
});

async function runPromises() {
  const value1 = await promise1;
  console.log(value1);
  const value2 = await promise2;
  console.log(value2);
  const value3 = await promise3;
  console.log(value3);
}

runPromises();

字符串
我的期望是看到程序总共运行了15秒,而实际上,它运行了5秒,似乎promise是并行运行的。
你在干什么?

t3irkdon

t3irkdon1#

传递给promise构造函数的回调会立即执行。所以它们是并行执行的,对吧。把它们转换成函数:

const promise1 = () => new Promise((resolve) => {
  setTimeout(() => {
    resolve(1);
  }, 5000);
});

const promise2 = () => new Promise((resolve) => {
  setTimeout(() => {
    resolve(2);
  }, 5000);
});

const promise3 = () => new Promise((resolve) => {
  setTimeout(() => {
    resolve(3);
  }, 5000);
});

async function runPromises() {
  const value1 = await promise1();
  console.log(value1);
  const value2 = await promise2();
  console.log(value2);
  const value3 = await promise3();
  console.log(value3);
}

runPromises();

字符串

相关问题