javascript - promise : How to resolve an unknown amount of promises

标签 javascript promise

我有一个函数,它接收数组中未知数量的建筑物 ID,即 [4,5],然后调用一个返回它的名称和描述的函数。鉴于这是一个未知数,我不知道如何处理。我尝试创建一个 for 循环,但毫无结果,我完全迷路了。你在下面看到的是我将整个数组发送给一个函数,但我想遍历每个元素并单独调用该函数

编辑:谢谢大家的热心回复。你一直非常乐于助人和支持

function getBuilding(buildingId){
      return new Promise(function(resolve,reject){
          Building.getBuilding(buildingId).then((buildingInfo)=>{
              resolve(buildingInfo);
          }); 
      })
}

最佳答案

您想使用 Promise.all , all 的 promise 将在数组中的所有项都已解析后解析。然后,这将返回一个包含结果数组的 promise ,其中第一项是第一个建筑 ID 结果,第二个是第二个 ID,依此类推。

function getBuilding(ids) {
  let promises = []
  // We will assume `getInfo()` returns a promise that resolves the buildings info
  ids.forEach(id => promises.push(getInfo(id)))
  return Promise.all(promises)
}

function getInfo(id) {
  // Resolves the info after a random amount of time to simulate
  // something that may take some time to execute.
  return new Promise(resolve => setTimeout(() => resolve({id}), Math.floor(Math.random() * 5000)))
}

console.log('Just a moment, calculating data...')
getBuilding([3, 5, 7, 9]).then(results => {
  console.log('building id', results[0].id) // buildingId = 3
  console.log('building id', results[1].id) // buildingId = 5
  console.log('building id', results[2].id) // buildingId = 7
  console.log('building id', results[3].id) // buildingId = 9
})

关于javascript - promise : How to resolve an unknown amount of promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938388/

相关文章:

javascript - 将参数传递给nodejs中的module.exports

javascript - 获取API : Only redirect if there is no error in POST form

javascript - 在处理程序中创建了一个 promise ,但没有从中返回

JavaScript/jQuery 不触发滚动事件

javascript - PushState() 关闭 'remember password' 对话框

javascript - ng 如果字符串包含 Angular

Javascript Blob 构造函数不适用于 iPad

javascript - 如何在 Firebase 中添加带有电子邮件和密码的用户名?

unit-testing - Jasmine 中没有解决的 Angular promise

typescript - 使用 Promise.all() 优化多个 api 请求