首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Learnyounode #6使其模块化:正确的结果和抛出的错误同时?

Learnyounode #6使其模块化:正确的结果和抛出的错误同时?
EN

Stack Overflow用户
提问于 2016-02-21 21:18:27
回答 5查看 8K关注 0票数 8

我正在完成nodeschool.io learnyounode练习6,makeit模块化。

我得到了正确的结果,但是对于一段我不熟悉的代码,仍然有一个错误。任何帮助都会很好。

以下是结果和错误:

代码语言:javascript
运行
复制
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文件是:

代码语言:javascript
运行
复制
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文件是:

代码语言:javascript
运行
复制
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)             
                }
            })
        }
    })




};
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-25 10:58:41

我认为问题在于,它期望使用筛选列表的数组调用回调函数一次,而不是每次在forEach方法中调用。

我的makeitmodular.js文件是:

代码语言:javascript
运行
复制
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文件是:

代码语言:javascript
运行
复制
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);
        }
    })
}
票数 17
EN

Stack Overflow用户

发布于 2018-02-20 22:48:13

我只用ES6编写了一个更清晰的答案,我同意其余的--这个挑战有点不清楚。

program.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2017-10-10 21:42:25

我同意这一挑战的措辞可以更加明确。下面是代码的另一个版本,以防其他人感兴趣:

filter.js:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35542194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档