【问题标题】:How to resolve promise making function in map chain?如何解决地图链中的承诺制定功能?
【发布时间】:2021-02-08 16:46:20
【问题描述】:

我希望下面代码中的所有 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());

【问题讨论】:

    标签: javascript promise chaining


    【解决方案1】:

    将其放入Promise.all,然后您需要在.then 中再添加一个.map 以进行后续操作:

    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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多