Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays node js-包含变量和函数结果的模块范围_Arrays_Node.js_Module_Scope_Tostring - Fatal编程技术网

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) {

        }
    }
});

请参阅:

非常感谢!这是因为代码是异步运行的。很高兴知道。