嵌套forEach循环产生解析值的承诺

时间:2018-10-24 13:05:02

标签: javascript ecmascript-6 es6-promise

在由两个forEach循环填充后,我想用“内容”解决这个承诺。

 '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((resolve, reject) => {
    let content = '';
    readDirAsync(`${filepath}/scss`)
      .then((files) => {
          files.forEach((file) => {
              fs.stat(`${filepath}/scss/${file}`, (err, stats) => {
                      if (stats.isDirectory()) {
                          readDirAsync(`${filepath}/scss/${file}`)
                          .then(scssfiles => {
                              scssfiles.forEach((scssfile) => {
                                  content += `@import "${filepath}/scss/${file}/${scssfile}"; \n`;
                              });
                          })
                      }
              });
          });
            console.log("loging import statement content: " + content);
            resolve(content);
      });
})
}

目前尚不确定。

1 个答案:

答案 0 :(得分:-1)

我将其更改为async / await以使其更易于阅读,看来您的主要问题是您的files.forEach需要包装在Promise.all中,每次迭代都返回一个诺言-如果您只想遵守诺言而不是异步/等待,则最终console.logresolve必须在该then的{​​{1}}语句中。< / p>

Promise.all