想用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秒后醒来
// 此处敲回车并等待,结果如图
// 然后再输入如下内容,回车
Promise.all([p1, p2]).then((result) => {
console.log(result) // 立即输出[ '3秒后醒来', '2秒后醒来' ],没有其他console
}).catch((error) => {
console.log(error)
})
如图:
后面的promise.all(),只有接受promise的作用?那这种promise是不是没有意义?
首先 js 中不存在同时执行。
因为你在

p1 = wake(3000)
处已经调用了方法, p1 中现在是个 Promise。那么我们在你调用时,不执行,留在Promise.all时执行。