我正在完成nodeschool.io learnyounode练习6,makeit模块化。
我得到了正确的结果,但是对于一段我不熟悉的代码,仍然有一个错误。任何帮助都会很好。
以下是结果和错误:
Your submission results compared to the expected:
ACTUAL EXPECTED
────────────────────────────────────────────────────────────────────────────────
"CHANGELOG.md" == "CHANGELOG.md"
"LICENCE.md" == "LICENCE.md"
"README.md" == "README.md"
"" == ""
────────────────────────────────────────────────────────────────────────────────
/usr/local/lib/node_modules/learnyounode/node_modules/workshopper-exercise/exercise.js:182
processors[i].call(self, mode, function (err, pass) {
^
TypeError: Cannot read property 'call' of undefined
at next (/usr/local/lib/node_modules/learnyounode/node_modules/workshopper-exercise/exercise.js:182:18)
at /usr/local/lib/node_modules/learnyounode/node_modules/workshopper-exercise/exercise.js:189:7
at callback (/usr/local/lib/node_modules/learnyounode/exercises/make_it_modular/verify.js:26:15)
at modFileError (/usr/local/lib/node_modules/learnyounode/exercises/make_it_modular/verify.js:31:5)
at /usr/local/lib/node_modules/learnyounode/exercises/make_it_modular/verify.js:119:18
at /Users/Olly/workspace/learnyounode/mymodule.js:13:13
at Array.forEach (native)
at /Users/Olly/workspace/learnyounode/mymodule.js:11:9
at FSReqWrap.oncomplete (fs.js:82:15)我的makeitmodular.js文件是:
var dir = process.argv[2];
var filter = process.argv[3];
var mymodule = require('./mymodule.js')
mymodule (dir,filter, function (err, data) {
if (err) {
console.log("There was an error")
}
else {
console.log(data)
}
})我的module.js文件是:
var fs = require('fs')
var path = require('path');
module.exports = function(dir, filter, callback) {
fs.readdir(dir, function (err, list) {
if (err) {
return callback(err)
}
else {
list.forEach( function(file) {
if ( path.extname(file) === '.' + filter ) {
return callback(null, file)
}
})
}
})
};发布于 2016-02-25 10:58:41
我认为问题在于,它期望使用筛选列表的数组调用回调函数一次,而不是每次在forEach方法中调用。
我的makeitmodular.js文件是:
var path = require('path');
var mymodule = require('./mymodule');
var dir = process.argv[2];
var filterExtension = process.argv[3];
var callback = function (err, list) {
if (err) throw err;
list.forEach(function (file) {
console.log(file);
})
}
mymodule(dir, filterExtension, callback);我的module.js文件是:
var fs = require('fs');
var path = require('path');
module.exports = function (directory, extension, callback) {
fs.readdir(directory, function (err, list) {
if (err) return callback(err);
else {
list = list.filter(function (file) {
if(path.extname(file) === '.' + extension) return true;
})
return callback(null, list);
}
})
}发布于 2018-02-20 22:48:13
我只用ES6编写了一个更清晰的答案,我同意其余的--这个挑战有点不清楚。
program.js
const myModule = require('./myModule.js');
const dir = process.argv[2];
const ext = process.argv[3];
myModule(dir, ext, (err, list) => {
return err ? console.error('There is an error:', err) :
console.log(list.join('\n'));
});myModule.js
const fs = require('fs');
const path = require('path');
const myModule = (dir, ext, cb) => {
fs.readdir(dir, (err, list) => {
return err ? cb(err) : cb(null, list.filter(file =>
path.extname(file) === `.${ext}`));
});
};
module.exports = myModule;发布于 2017-10-10 21:42:25
我同意这一挑战的措辞可以更加明确。下面是代码的另一个版本,以防其他人感兴趣:
filter.js:
const path = process.argv[2]
const fileType = process.argv[3]
const readNewlines = require('./readNewlines')
readNewlines(path, fileType, function(err, result) {
if(err) return err;
console.log(result.join('\n'));
})readNewlines.js:
const fs = require('fs')
readNewlines = function(path, fileType, callback) {
fs.readdir(path, function(err, result) {
if(err) return callback(err);
const res = result.filter(function(fileName) {
return (fileName.indexOf('.'+fileType) !== -1);
}).map(fileName => {
return fileName
})
return callback(null, res);
})
}
module.exports = readNewlines;https://stackoverflow.com/questions/35542194
复制相似问题