微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决地图链中的承诺功能?

如何解决如何解决地图链中的承诺功能?

我希望下面代码中的所有 slowAdd() 并行发生,但我不想在它们全部解决之前执行下一个 .map() 步骤。怎么做?

async function slowAdd(a) {
  return new Promise( (resolve,reject) => setTimeout(() => resolve(a+5),1000) )
}

async function calcArray(list) {
  return list
    .map( a => a+1 )
    .map( a => slowAdd(a) )
    .map( a => a+1 )
}

async function main() {
  const list = [1,2,3,4,5]
  const newList = await calcArray(list)
  console.log(newList)
}

main()
  .catch(err => {
    console.error(err);
  })
  .then(() => process.exit());

解决方法

将它放在 Promise.all 中,然后您需要在 .map 中使用另一个 .then 以进行后续操作:

async function slowAdd(a) {
  return new Promise( (resolve,reject) => setTimeout(() => resolve(a+5),1000) )
}

async function calcArray(list) {
  return Promise.all(
    list
      .map( a => a+1 )
      .map( a => slowAdd(a) )
  )
    .then(addedResults => addedResults.map( a => a+1 ));
}

async function main() {
  const list = [1,2,3,4,5]
  const newList = await calcArray(list)
  console.log(newList)
}

main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。