我有一个函数,该函数在数组中即[4,5]中接收未知数量的建筑物ID,然后调用一个返回其名称和描述的函数。鉴于数量未知,我不知道该如何处理。我尝试创建一个for循环,但无济于事,我完全迷路了。您在下面看到的是我将整个数组发送给函数,但是我想遍历每个元素并分别调用函数
编辑:谢谢大家的友好答复。您一直非常乐于助人和支持
function getBuilding(buildingId){
return new Promise(function(resolve,reject){
Building.getBuilding(buildingId).then((buildingInfo)=>{
resolve(buildingInfo);
});
})
}
答案 0 :(得分:4)
您要使用Promise.all,all
的承诺将在数组中的所有项目也都解决之后就解决。然后,这将返回带有结果数组的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
})
答案 1 :(得分:3)
Promise.all()方法接受一个承诺数组,并等待它们全部解决。
Promise.all([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
请注意,如果任何一项承诺失败,Promise.all()都会失败。
答案 2 :(得分:2)
您可以使用Promise.all
和iterable
(在这种情况下可以是数组)使用。
赞:
function caller( ...promises ) {
Promise.all( promises ).then( function( value ) {
console.log( 'all completed' );
});
}
promise基本上是一组参数,请看:
答案 3 :(得分:2)
我认为传播算子和Promise.all
function getInfos(...ids) {
return Promise.all(ids.map(id => Building.getBuilding(id )));
}
// can be any number of params
getInfos(id1, id2, id3).then(([info1, info2, info3]) => {
// do stuff
});
在另一种评论中,我看到buildingId
是数组,
const buildingId = [1, 2, 3];
getInfos(...buildingId).then(([info1, info2, info3]) => {
// do stuff
});
或简化的
function getInfos(ids) {
return Promise.all(ids.map(id => Building.getBuilding(id )));
}
const buildingId = [1, 2, 3];
getInfos(buildingId).then(([info1, info2, info3]) => {
// do stuff
});