Асинхронная операция с каждым файлом с помощью npm filewalker

Я использую Filewalker, чтобы пройти через каталог. Однако для каждого файла я бы хотел выполнить асинхронную операцию. Как я могу гарантировать, что done срабатывает только после завершения всех операций?

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

1 ответ

Как on Событие file не предоставляет никаких параметров обратного вызова, создает массив файлов и добавляет в него каждый файл. Тогда на 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();
Другие вопросы по тегам