Я бы использовал BlueBird Promise.each , через который итерация будет выполняться последовательно, ожидая каких-либо обещаний в процессе:
const BlueBird = require("bluebird");
await BlueBird.each(album, async function(image) {
const adaptedImage = await await adaptImageToAlbum(image);
finalAlbum.push(adaptedImage);
})
Чтобы проиллюстрировать это напрямую, следующее код заполняет массив в случайном порядке:
const album = [1,2,3,4,5];
async function test(album) {
let finalAlbum = [];
await Promise.all(
album.map(async (image) => {
const adaptedImage = await new Promise((resolve) => {
setTimeout(() => {
resolve(image);
}, Math.random() * 100);
});
finalAlbum.push(adaptedImage);
})
)
console.log(finalAlbum); //random order
}
Тогда как с Bluebird он всегда будет сохранять исходный порядок:
const BlueBird = require("bluebird");
const album = [1,2,3,4,5];
async function test2(album) {
let finalAlbum = [];
await BlueBird.each(album, async function(image) {
const adaptedImage = await new Promise((resolve) => {
setTimeout(() => {
resolve(image);
}, Math.random() * 100);
});
finalAlbum.push(adaptedImage);
}
)
console.log(finalAlbum); // [1,2,3,4,5], keeps array order
}