Array中的每个项目都是未定义的…即使它不是(Node.js – 沙箱脚本)

在映射string数组时,在Node.js中看到奇怪的行为。 在下面的代码中,第一个map函数正确地在images数组中打印string。 直接在下面的一行, imgNamevariables对于循环中的每个项目都是undefined的。

 images.map(function(imgName){console.log(imgName)}) // this properly prints each string in the array images.map(function(imgName) { // each imgName returns undefined // first check the size of the image and instantiate canvas var dimensions = sizeOf(imgpath+imgName); if(debug) { console.log("Image dimensions "+imgpath+imgName+": "+dimensions.width+","+dimensions.height); } var canvas = new Canvas(dimensions.width, dimensions.height); var ctx = canvas.getContext('2d'); var Image = Canvas.Image; global.canvas = canvas; global.ctx = ctx; global.Image = Image; var img = new Image; img.src = fs.readFileSync(imgpath+imgName); tracking.track(img, tracker); }); 

唯一让我想到干扰地图的事情是callback函数底部的trackingvariables是沙箱。 下面是我如何实例化它:

 var sandbox = function (files, sandbox) { var source, script, result; if (!(files instanceof Array)) { files = [files]; } source = files.map(function (file) { return fs.readFileSync(file, 'utf8'); }).join(''); if (!sandbox) { sandbox = {}; } script = new Script(source); result = script.runInNewContext(sandbox); return sandbox; }; // instantiate sandboxed tracking class var tracking = sandbox('./node_modules/tracking/build/tracking.js',{ navigator: {}, tracking: {}, window: {} }).tracking; 

是否有可能这个“沙盒”干扰循环范围内的variables(这个沙箱是在循环之前实例化)? 还是有另一个原因?

更新

我意识到,如果我删除了所有的代码,并开始逐一添加循环中的每一行,实际上已经定义了imgNamevariables。 看来,无论出于什么原因,当在callback函数中抛出一个错误时,它就会变成未定义的。 这很难,因为它似乎掩盖了实际的错误并阻碍了debugging。 这是控制台中的错误:

 fs.js:500 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^ Error: ENOENT, no such file or directory '/Users/.../images/undefined' at Error (native) at Object.fs.openSync (fs.js:500:18) at syncFileToBuffer (/Users/.../index.js:58:23) at module.exports (/Users/.../index.js:100:18) at /Users/.../extractor.js:59:20 at Array.forEach (native) at Object.<anonymous> (/Users/.../extractor.js:57:8) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) 

不存在错误消除variables或神秘函数调用混淆了他们,除非他们实际上改变了他们的价值。

这里唯一的问题是你的数组里有一个未定义的值