0

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

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

1 回答 1

1

由于on文件事件不提供任何回调参数,因此创建文件数组并将每个文件添加到其中。然后在 filewalkerdone事件上使用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();
于 2017-04-13T23:13:48.323 回答