Я выполняю упражнения learnyounode. В этой функции я перечисляю каталог и файлы фильтров по расширению. Как я понимаю, если я укажу недопустимое имя каталога, он должен перейти в пункт if
и выйти. Но вместо этого он переходит к предложению if, а затем жалуется на что-то в предложении else
.Почему в этом фрагменте кода узла работает оператор else?
Модуль:
module.exports = function (path, ext, callb) {
var fs = require('fs');
var elems = [];
var r = new RegExp("\\." + ext);
fs.readdir(path, function (err, list) {
console.log(err); // this runs, it's an object like { [Error: ENOENT, scandir '/Users/JohnnyLee/baobabf/
console.log(list); // this also runs, it's undefined
if (err) {
console.log("ERR!!!"); // this ran!
return callb(err);
} else {
console.log("NO ERRR!!!"); // this didn't run :/
list.forEach(function (i) { // this crashes?
if (i.match(r)) {
elems.push(i);
}
});
return callb(err, elems);
}
console.log(list);
});
};
Исполняемые:
var mymod = require('./p06-1');
var filename = process.argv[2]
var extension = process.argv[3]
if (filename && extension) {
mymod(filename, extension, function (err, list) {
list.forEach(function (i) {
console.log(i);
});
})
}
Выход:
triton:learnnode JohnnyLee$ node p06-2.js doesntexist txt
{ [Error: ENOENT, scandir 'doesntexist'] errno: -2, code: 'ENOENT', path: 'doesntexist' }
undefined
ERR!!!
/Users/JohnnyLee/learnnode/p06-2.js:7
list.forEach(function (i) {
^
TypeError: Cannot read property 'forEach' of undefined
at /Users/JohnnyLee/learnnode/p06-2.js:7:13
at /Users/JohnnyLee/learnnode/p06-1.js:11:20
at FSReqWrap.oncomplete (fs.js:95:15)
triton:learnnode JohnnyLee$
Что я пропустил :(
Спасибо! > Может быть, мне плохой день не понять. – jleeothon