在此我有一个疑问,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)
这是一个稍微简化的示例,展示了其具体工作原理:
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的一部分)。