【发布时间】:2018-10-24 13:05:02
【问题描述】:
我想用“内容”来解决这个承诺,在它被几个 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);
});
})
}
目前它是未定义的。
【问题讨论】:
-
您正在解决的承诺之前是您从文件中读取的值得到解决。
-
第二个
readDirAsync需要被承诺。 -
@joseatchang 是的,我也这么认为。不过,我不清楚如何解决这个问题。
-
您可以在将所有文件读入 Promise 时进行包装,然后使用
Promise.all读取所有文件,然后解析该结果。但我认为以这种方式嵌套 promise 可能不是一个干净的解决方案。
标签: javascript ecmascript-6 es6-promise