Не получилось у вас убежать от асинхронности
Делать придётся примерно так:
function renderImg(dest, target){
return jimp.read(dest).then(img => {
return img.write(target)
});
};
function oneByOne(array, func, errorCallback) {
return array.reduce((p, arguments)=> p.then(
result => func.apply(this, arguments),
error => {
if(errorCallback) errorCallback(error);
return func.apply(this, arguments);
},
), Promise.resolve());
};
var argumentsList = list.reduce((array, dest) => {
for(value in settings){
array.push([
dest,
dest.replace("sources\\products\\", replaceDir + value + "\\")
])
}
}, []);
oneByOne(argumentsList, renderImg);