如果我们尝试在另一个承诺中解决一个未决的承诺会怎样

问题描述 投票:0回答:1

在此我有一个疑问,res(p2)只有在p2承诺得到解决后才能得到解决,所以这个机制是如何工作的,res如何知道p2正在等待。

function run(p2) {
  let p1 = new Promise((res, rej) => {
    console.log(p2)
    res(p2)
  })
  p1.then(val => console.log(val))
}
let p2 = new Promise((res, rej) => {
  setTimeout(() => {
    res('po')
  }, 6000)
})
run(p2)

javascript promise
1个回答
0
投票

这是一个稍微简化的示例,展示了其具体工作原理:

const base = new Promise((resolveFunc) => {
  
  resolveFunc(new Promise((innerResolveFunc) => {
    setTimeout(() => innerResolveFunc(), 2000);
  }))

});

base.then(() => console.log('resolved'))

当作为

base
参数传递的承诺得到满足时,
resolveFunc
承诺将得到满足。在此示例中,
console.log
将在 2 秒后运行。

这是MDN的解释:

传递给resolveFunc的值参数可以是另一个promise对象,在这种情况下,新构造的promise的状态将被“锁定”到传递的promise(作为解析promise的一部分)。

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