如何获得访问的参数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 }
作为文件名设置为“./test2.txt”。 如果我处理/使用中的文件名可变的读取文件fs.stat
回调它将使用test2.txt
这不是预期的。
我预计回调中看到的是
{ filename: './test1.txt', size: 5 }
不要以为有一种方法,现在这样做的权利。 可能是在某些时候添加到节点一件好事。 如果你打算这样做了很多,你可以把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);});
您可以使用同步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'
接受答案的伟大工程,但在这里我想到了,当我通过文件的数组要循环的解决方案:
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
。