在separte模块中将参数传递给回调函数

时间:2018-06-30 15:05:22

标签: javascript node.js scope node-modules

我将使用一个函数创建一个新的单独模块,该函数包含一个在主文件中调用的回调。

我的程序应使用 3个参数:首先是文件目录,然后是文件扩展名,最后是应通过文件扩展名过滤目录的回调函数。

这是我的module.js文件

var fs = require('fs')

module.exports = function (directory, fileExtension, callbackfun) {
    fs.readdir(directory, callbackfun);
}

然后在主文件中导入模块,然后使用函数。

modulejs(process.argv[2], process.argv[3], callbackfun(callbackfn));
var callbackfn = function (err, data, fileExtension) {
    console.log(fileExtension);
    let filtred = data.filter(file => { if (file.indexOf("." + fileExtension) > -1) { console.log(file); } });
};
function callbackfun(callbackfunc1) {
    callbackfunc1(err, data, fileExtension);
}

我实际上得到的错误是

ReferenceError: err is not defined

更新:我已经编辑了代码,现在出现了其他错误

UPDATE2 :我在Internet上获得了该解决方案,但不了解它的工作原理,如果有人逐步向我解释它,那将是很好的

module.jsconst fs = require('fs')
const path = require('path')

module.exports = function (dir, filterStr, callback) {
    fs.readdir(dir, function (err, list) {
        if (err) {
            return callback(err)
        }

        list = list.filter(function (file) {
            return path.extname(file) === '.' + filterStr
        })

        callback(null, list)
    })
}

main.js

const filterFn = require('./module.js')
const dir = process.argv[2]
const filterStr = process.argv[3]

filterFn(dir, filterStr, function (err, list) {
    console.log(list);
    if (err) {
        return console.error('There was an error:', err)
    }

    list.forEach(function (file) {
        console.log(file)
    })
})

0 个答案:

没有答案