По хорошему, надо учитывать, что какие то картинки могут не существовать (по разным причинам не загрузиться) Тогда нужна такая функция
function preload(ret) {
Promise.allSettled(
ims.map((src, i)=> {
let im = new Image
im.src = src
return im.decode().then (_ => { return {src: src, w: im.width, h: im.height, img:im}});
})
).then ( data => {
ret(data.filter(d => d.status == 'fulfilled').map(d => d.value))
})
}