Arrays node js-包含变量和函数结果的模块范围
我需要一些帮助来理解如何从我想作为模块传递的函数中复制结果。导出。。这里存在全局和局部范围的问题:Arrays node js-包含变量和函数结果的模块范围,arrays,node.js,module,scope,tostring,Arrays,Node.js,Module,Scope,Tostring,我需要一些帮助来理解如何从我想作为模块传递的函数中复制结果。导出。。这里存在全局和局部范围的问题: // Declare node.js module dependencies from API var walk = require('walk'), filter; // Declare variables var files = []; var filteredFiles = []; var i = 0; var fileextension = '.html'; var
// Declare node.js module dependencies from API
var walk = require('walk'),
filter;
// Declare variables
var files = [];
var filteredFiles = [];
var i = 0;
var fileextension = '.html';
var foldername = 'node_modules';
var filter = {
followLinks: false
};
var walker = walk.walkSync(foldername, filter);
var temp = [];
module.exports = {
scanDirWithFil: function () {
walker.on('file', function(root, stat, next) {
files.push(stat.name);
if (files[i].indexOf(fileextension) != -1) {
filteredFiles.push(stat.name);
console.log(files[i]);
next();
i++;
}
else {
next();
i++;
}
console.log('Number of filtered files in array: ' + filteredfiles.length + ", Total number of files in array: " + files.length)
return files, filteredFiles;
});
temp = files.toString();
return temp;
}
};
正如大家在这里看到的,我试图返回函数scanDirWithFil的结果,但是返回是通过temp,它来自files.toString。这就是问题所在。由于作用域问题,文件此时变为空数组。从walker.on方法返回的文件数组实际上并未超出其自身的作用域
如果我所说的是正确的(这是一个范围问题)。。有人可以指导我或帮助我解决这个问题吗
谢谢,,
Brian查看文档,显然调用了walker。on会导致代码异步运行。因此这不是作用域问题,而是在执行walker函数之前执行行
temp=files.toString()
。因此,文件
数组为空是唯一符合逻辑的
要在同步模式下使用walker,您需要执行以下操作:
walker = walk.walkSync("/tmp", {
listeners: {
file: function (root, fileStats, next) {
}
}
});
请参阅:非常感谢!这是因为代码是异步运行的。很高兴知道。