为什么async.map函数与本机fs.stat函数一起使用?

时间:2013-05-08 16:29:15

标签: node.js asynchronous node-async

async.map(['file1','file2','file3'], fs.stat, function(err, results){
    // results is now an array of stats for each file
});

根据documentation,第二个参数是:

  

iterator(item,callback) - 一个应用于每个项目的函数   阵列。

精细。

  

迭代器传递一个必须的回调(错误,转换)   一旦它完成了一个错误(可以为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
    }
);

2 个答案:

答案 0 :(得分:6)

fs.stat接受两个参数,第一个是文件,第二个是回调,按节点约定接受两个参数,一个错误和文件的统计信息:

fs.stat(path, callback)

可以被视为

fs.stat(path, function(err, stats){
  // ...
});

这就是它工作的原因,fs.stat通过准确传递它所需要的来调用。

更多信息:http://nodejs.org/api/fs.html#fs_fs_stat_path_callback

答案 1 :(得分:1)

来自http://nodejs.org/api/fs.html#fs_fs_stat_path_callback

的文档

fs.stat(路径,回调)

异步统计(2)。回调得到两个参数(错误,统计),其中stats是fs.Stats对象。有关详细信息,请参阅下面的fs.Stats部分。

由于fs.stat回调返回(错误,统计),以下工作正常

async.map(['file1','file2','file3'], fs.stat, function(err, results){
    // results is now an array of stats for each file
});

为了做同样的事情,你自己传递一个具有适当回调的函数

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')
})