为什么async.map函数与原生fs.stat函数一起工作?
async.map(['file1','file2','file3'], fs.stat, function(err, results){ // results is now an array of stats for each file });
根据文档 ,第二个参数是:
iterator(item,callback) – 应用于数组中每个项目的函数。
精细。
迭代器传递一个callback函数(err,transformed),一旦它完成了一个错误(可以是null)和一个转换后的项目,就必须调用它。
我认为fs.stat
不符合这一点,我会说这不应该工作。
它应该是这样的:
async.map(['file1','file2','file3'], function (file, complete) { fs.stat(file, function (err, stat) { complete(err, stat) }); }, function(err, results){ // results is now an array of stats for each file } );
fs.stat
接受两个参数,第一个是文件,第二个是callback,由节点约定接受两个参数,错误和文件的统计信息:
fs.stat(path, callback)
这可以被看作是
fs.stat(path, function(err, stats){ // ... });
这就是为什么它工作, fs.stat
通过传递正是它所需要的。
更多信息: http : //nodejs.org/api/fs.html#fs_fs_stat_path_callback
从http://nodejs.org/api/fs.html#fs_fs_stat_path_callback上的文档
fs.stat(path,callback)
asynchronousstat(2)。 callback得到两个参数(err,stats),其中stats是一个fs.Stats对象。 请参阅下面的fs.Stats部分了解更多信息。
由于fs.statcallback返回(err,stats),以下工作正常
async.map(['file1','file2','file3'], fs.stat, function(err, results){ // results is now an array of stats for each file });
要自己做同样的传递一个适当的callback函数
var async = require('async') var inspect = require('eyespect').inspector(); function custom(param, callback) { var result = 'foo result' var err = null callback(err, result) } var items = ['item1', 'item2'] async.map(items, custom, function (err, results) { inspect(results, 'results') })