我正在使用这个异步递归函数来遍历目录的文件和文件夹,当找到一个 .css 文件时,我将数据附加到一个名为“common.css”的文件中。
var walk = function(dir, done) {
var results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null);
list.forEach(function(file) {
file = dir + '/' + file;
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
minimizer(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null);
});
} else if(file) {
fs.open('common.css', 'a', 666, function( err, id ) {
fs.write( id, 'hello', null, 'utf8', function(){
fs.close(id, function(){
console.log('file closed');
});
});
});
}
if (!--pending) done(null);
});
});
}); }
问题是,由于是异步的,我感觉到有时函数的多个实例同时写入文件。有什么办法可以控制这种通量并将写入任务排队?
此代码的目的是合并在目录中找到的 .css 文件。我不能在这个项目中使用外部工具。
编辑答案:嗯,为此,我可以收集我想要合并的所有 .css 文件的路径,在我拥有它们之后,调用一个同步函数来编写它们。
这就是
变量结果 = []
是为了。我才意识到。