我正在使用Filewalker遍历一个目录。但是,对于每个文件,我想执行一个异步操作。如何确保done
仅在所有操作完成后才触发?
filewalker('.')
.on('file', function(p, s) {
processAsync(p);
})
.on('done', function() {
console.log('All files have been processed');
})
.walk();
我正在使用Filewalker遍历一个目录。但是,对于每个文件,我想执行一个异步操作。如何确保done
仅在所有操作完成后才触发?
filewalker('.')
.on('file', function(p, s) {
processAsync(p);
})
.on('done', function() {
console.log('All files have been processed');
})
.walk();
由于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();