Ваш код не будет работать, потому что вы ждете только одно обещание, вам нужно использовать Promise.all (arrayOfPromises), этот метод вернет новое обещание, которое запускается только после того, как все обещания в массиве выполнены.
let allPromises = all.map((f) => {
promise = new Promise((resolve, reject) => {
fs.readFile(f, 'utf8', function (err, content) {
if (!err) {
scenario += (content.match(/Scenario(\s?)\(\'/g) || []).length;
uc += (content.match(/\/\/(\s?)UC-(.)+/g) || []).length;
resolve({scenario:scenario, uc:uc});
} else {
reject('Error!');
}
});
});
return promise;
});
Promise.all(allPromises).then((values) => {
// Sum all the scenarios and UCS, becase the values is an array of objects representing answers from each promise, we must sum them ourselves
console.log('Total Scenarios: ' + values.reduce((accumulated, current) => accumulated + current.scenario, 0);
console.log('Total UCs: ' + values.reduce((accumulated, current) => accumulated + current.uc, 0););
});
Примечание: обещание «все» будет отклонено, если одно из внутренних обещаний будет отклонено, поэтому в случае, если вы захотите проигнорировать этот случай и суммировать остальные обещания, вам необходимо разрешитьобещание с «пустыми» значениями, а затем позаботиться об этом при суммировании в финале.