Я пытаюсь обернуть голову вокруг этой проблемы в течение последних часов, но не могу понять это. Думаю, мне все равно придется привыкнуть к стилю функционального программирования;)
Я написал рекурсивную функцию, которая проходит через структуру каталогов и делает вещи определенным файлам. Эти функции используют асинхронные методы ввода-вывода. Теперь я хочу выполнить какое-то действие, когда все это происходит.
Как я могу убедиться, что это действие выполняется после того, как все вызовы parse
были выполнены, но все еще используют асинхронные функции ввода-вывода?
var fs = require('fs'),
path = require('path');
function parse(dir) {
fs.readdir(dir, function (err, files) {
if (err) {
console.error(err);
} else {
// f = filename, p = path
var each = function (f, p) {
return function (err, stats) {
if (err) {
console.error(err);
} else {
if (stats.isDirectory()) {
parse(p);
} else if (stats.isFile()) {
// do some stuff
}
}
};
};
var i;
for (i = 0; i < files.length; i++) {
var f = files[i];
var p = path.join(dir, f);
fs.stat(p, each(f, p));
}
}
});
}
parse('.');
// do some stuff here when async parse completely finished