Асинхронная операция с каждым файлом с помощью 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();