首页 > 解决方案 > 嵌套承诺解决方法

问题描述

在下面的代码中,当我调用 func 时,我得到了一个在 3 秒后解析的 promise,它解析为另一个 promise。再过 3 秒后,嵌套的 Promise 会解析为数字 43。我的问题是为什么 console.log 在 6 秒后返回 res:43 而不是在 3 秒后返回 unresolved promise。我 .then func2 但我从不 .then otherFunc

async function func(){
  const val = func2().then((other)=>{console.log("res:"+other)})
}

async function func2(){
  return new Promise(resolve => {
    setTimeout(()=>resolve(otherfunc()),3000)

  })
}
async function otherfunc(){
  return  new Promise(resolve => {
    setTimeout(()=>resolve(43),3000)

  })
}

标签: javascriptes6-promise

解决方案


func2用另一个承诺解决otherfunc(),所以func2碰巧在 3 秒后解决,然后调用otherfunc它也在 3 秒后解决。您在console.log语句中看到的结果显示 43,因为.then()将等待所有承诺完成。


推荐阅读