使用npm filewalker对每个文件执行异步操作

时间:2017-04-12 08:25:07

标签: node.js asynchronous npm filewalker

我正在使用Filewalker遍历目录。但是,对于每个文件,我想执行异步操作。如何确保仅在所有操作完成后才触发done

filewalker('.')
  .on('file', function(p, s) {
    processAsync(p);
  })
  .on('done', function() {
    console.log('All files have been processed');
  })
.walk();

1 个答案:

答案 0 :(得分:1)

由于on文件事件不提供任何回调参数,因此创建文件数组并将每个文件添加到其中。然后在filewalker done事件中使用async模块异步处理每个文件。

var filewalker = require('filewalker');
var async = require('async')

function fileAsyncFunc (file, cb) {
  setTimeout(function () {
    console.log('file processed asynchronously')
    cb()
  }, 100)
}

function doneProcessingFiles (err) {
  if (err) {
    return console.error(err)
  }
  console.log('done processing files asynchronously')
}

const files = []
filewalker('./node_modules/filewalker')
  .on('file', function(p, s) {
    //  add file to files array
    files.push({p,s})
  })
  .on('done', function() {
    //  call async functions to each file
    async.each(files, fileAsyncFunc, doneProcessingFiles)
  })
.walk();