在这一点上,我怀疑res(P2)只有在p2promise 得到解决后才能得到解决,那么这个机制是如何工作的,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'))

当作为resolveFunc的论点通过的promise 兑现时,base的promise 就会实现.在本例中,console.log将在2秒后运行.

以下是MDN的解释:

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

Javascript相关问答推荐

为什么它无法识别日期 Select 器上的任何 Select ?

复合密钥查找在mongoDB中未按预期工作

IOS(React Native)中未找到模块SquareReaderSDK

TestCafe预计文本等于以下内容之一

使用JavaScript更改json值顺序

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

积分计算和 colored颜色 判断错误

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

对象和数字减法会抵消浏览器js中的数字

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

拖放仅通过 Select 上传

colored颜色 检测JS,平均图像 colored颜色 检测JS

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

S文本内容和值不必要的不同

在执行异步导入之前判断模块是否已导入()

在数组中查找重叠对象并仅返回那些重叠对象

钛中的onClick事件需要在两次点击之间等待几秒钟

如何在Press上重新启动EXPO-AV视频?

每次重新呈现时调用useState initialValue函数

Socket.IO在刷新页面时执行函数两次