我使用这个异步递归函数遍历目录的文件和文件夹,当找到.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文件的路径,我想要合并,并且在我拥有它们之后,调用syncronous函数来编写它们。
这就是
VAR的结果= []
是有什么。我刚刚意识到这一点。
在这个例子中你开扩,并在该目录中common.css书面方式招呼每一个文件,所以如果你有3个文件,你会写“hellohellohello”。这是你的真实代码吗?为此目的,您可以获得文件数量,然后只打开和写入一次“hello”N次。 –