如何从回调中访问fs.read
,fs.stat
...方法的参数?
例如,如果我想根据文件的大小处理文件 关注(coffeeScript)代码段
#assuming test1.txt exists
filename = "./test1.txt"
fs.stat filename, (err, stats) ->
data = filename:filename,size:stats.size
console.log data
#further process filename based on size
filename = "./test2.txt"
打印
{ filename: './test2.txt', size: 5 }
as filename设置为“./test2.txt”。如果我使用fs.stat
回调中的文件名变量处理/读取文件,则会使用test2.txt
,这不是预期的。
我希望在回调中看到的是
{ filename: './test1.txt', size: 5 }
答案 0 :(得分:7)
不要认为现在有办法做到这一点。在某些时候添加到节点可能是一件好事。如果您要做很多事情,可以将fs.stat
放在友好的包装中。
var friendlyStat = function(filename, callback){
fs.stat(filename, function(err, stats){
stats.filename = filename
if(err) {
callback(err);
} else {
callback(err, stats);
}
})
}
friendlyStat('test1.txt', function(err, stat){ console.log(stat.filename);});
friendlyStat('test2.txt', function(err, stat){ console.log(stat.filename);});
答案 1 :(得分:1)
如果您负担得起,可以使用同步fs.statSync()
功能,这对您的问题有帮助。
var filename = 'test1.txt';
var stat = fs.statSync(filename);
//code you were writing in callback comes here like the below:
console.log('Is ' + filename + ' a directory? ' + stat.isDirectory());
//Outputs 'Is test1.txt a directory? false'
答案 2 :(得分:0)
接受的答案很有效,但是当我想循环浏览一系列文件时,我想出了一个解决方案:
var files = [ 'path/to/file1.txt', 'path/to/file2.txt'],
callback = function( filepath ) {
return function( error, stat ) {
console.log( filepath );
console.log( error );
console.log( stat )
};
};
for ( var i = 0; i < files.length; i++ ) {
fs.stat( files[ i ], callback( files[ i ] ) );
}
我们正在调用callback
函数并将文件名作为参数传递给它。然后该函数返回fs.stat
使用的实际回调函数。