Я изменил это на async / await, чтобы его было легче читать, похоже, ваша главная проблема в том, что ваш files.forEach
должен быть заключен в Promise.all
с каждой итерацией, возвращающей обещание - если выЕсли вы хотите придерживаться только обещаний вместо асинхронного / ожидающего, ваши окончательные значения console.log
и resolve
должны быть в выражении then
этого Promise.all
.
'use strict';
const {promisify} = require('util');
const fs = require('fs');
const readFileAsync = promisify(fs.readFile);
const readDirAsync = promisify(fs.readdir);
const writeFileAsync = promisify(fs.writeFile);
function writeImportStatement(filepath) {
return new Promise(async (resolve, reject) => {
let content = '';
const files = await readDirAsync(`${filepath}/scss`)
const done = await Promise.all(files.forEach(async (file) => {
return new Promise((resolve, reject) => {
fs.stat(`${filepath}/scss/${file}`, async (err, stats) => {
if(err) reject(err)
if (stats.isDirectory()) {
const scssfiles = await readDirAsync(`${filepath}/scss/${file}`)
scssfiles.forEach((scssfile) => {
content += `@import "${filepath}/scss/${file}/${scssfile}"; \n`;
})
}
resolve()
});
});
});
console.log("loging import statement content: " + content);
resolve(content);
})
}