Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
397 views
in Technique[技术] by (71.8m points)

Promise定义时就执行的问题和疑惑

想用promise.all同时执行两个异步方法,可promise定义时(如let p1 = wake(3000);)就执行了,就像下面的情况。promise.all怎么同时执行两个动作?
// 控制台环境下输入,两段分开

let wake = (time) => {
  return new Promise((resolve, reject) => {
    console.log(time);
    setTimeout(() => {
      console.log('time::::',time)
      resolve(`${time / 1000}秒后醒来`)
    }, time)
  })
}

let p1 = wake(3000); // 打印:3000;间隔3s打印: 3秒后醒来
let p2 = wake(2000); // 打印:2000;间隔2s打印: 2秒后醒来
// 此处敲回车并等待,结果如图

image.png

// 然后再输入如下内容,回车
Promise.all([p1, p2]).then((result) => {
  console.log(result)       // 立即输出[ '3秒后醒来', '2秒后醒来' ],没有其他console
}).catch((error) => {
  console.log(error)
})

如图:image.png

后面的promise.all(),只有接受promise的作用?那这种promise是不是没有意义?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

首先 js 中不存在同时执行

因为你在 p1 = wake(3000) 处已经调用了方法, p1 中现在是个 Promise。
image.png

那么我们在你调用时,不执行,留在Promise.all时执行。

image.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...