Если вы хотите использовать обещания, тогда: я думаю, это будет работать:
async function imageDetailsCache(images) {
var imageData = {};
var promises = [];
for(let i = 0; i < images.length; i++) { // notice the let instead of var
promises.push(
new Promise( (resolve, reject) => {
imageDetails(images[i], 'BIG')
.catch(e => {reject(e)})
.then( rBig => {
imageDetails(images[i], 'SMALL')
.catch(e => { reject(e)})
.then( rSmall => {
imageData[images[i]] = {
'BIG': rBig ,
'SMALL': rSmall
}
resolve ({
BIG: rBig,
SMALL: rSmall
});
});
});
}
)
);
}
await Promise.all(promises);
return imageData;
}
imageDetailsCache (images) .then ((r) => {console.log(r)});
Я должен подчеркнуть, что использование async & await правильно (как предложено https://stackoverflow.com/users/1048572/bergi) сделает этот код чище.
Лично я бы сделалэто так:
async function imageDetailsCache(images) {
var imageData = {};
var promises = [];
for(let i = 0; i < images.length; i++) {
try {
imageData[images[i]] = {
'BIG': await imageDetails(images[i], 'BIG') ,
'SMALL': await imageDetails(images[i], 'SMALL')
}
} catch (e) {
console.log(e);
}
}
return imageData;
}
imageDetailsCache (images) .then ((r) => {console.log (r)});
Надеюсьпомогает!