为什么我只在10秒后就得到第二个承诺结果

问题描述 投票:0回答:1
const p1 = new Promise((re,rj)=>{
  setTimeout(()=>{
    re("This is 10 sec promise");
  },10000);
});

const p2 = new Promise((re,rj)=>{
  setTimeout(()=>{
    re("This is second promise");
  });
});

async function handlePromise(){
  console.log("This is above all promise");
  const d = await p1;
  console.log("Iam after p1");
  const c = await p2;
  console.log("Iam after the p2");
 }
 handlePromise();

在这段代码中,为什么我在 10 秒后才得到 p2 和 console.log 的结果,它应该是 15,因为在异步函数中,当 p1 解析时,它将是 10 秒,然后当 js 遇到第二个承诺时,它应该采取还有 5 秒。

异步函数内的所有等待承诺是否同时注册,因为这只是解释此行为的唯一原因。

enter image description here

查看所有代码将在10秒后执行

javascript function asynchronous async-await promise
1个回答
0
投票

传入

Promise
构造函数的回调会立即执行。所以你的
setTimeout
也会立即执行。将您的 Promise 转换为函数并按需调用它们:

const p1 = () => new Promise((re,rj)=>{
  setTimeout(()=>{
    re("This is 10 sec promise");
  },10000);
});

const p2 = () => new Promise((re,rj)=>{
  setTimeout(()=>{
    re("This is second promise");
  });
});

async function handlePromise(){
  console.log("This is above all promise");
  const d = await p1();
  console.log("Iam after p1");
  const c = await p2();
  console.log("Iam after the p2");
 }
 handlePromise();

© www.soinside.com 2019 - 2024. All rights reserved.