javascript - 数组中的每个项目都是未定义的......即使它不是(Node.js - 沙盒脚本)

标签 javascript node.js

在映射字符串数组时,在 Node.js 中看到奇怪的行为。在下面的代码中,第一个映射函数正确打印 images 数组中的字符串。就在下面一行,对于循环中的每个项目,imgName 变量都是未定义

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);
});

唯一让我认为有什么东西干扰 map 的是回调底部的 tracking 变量是沙箱的。这是我实例化它的方法:

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;

这个“沙箱”是否可能干扰循环范围内的变量(这个沙箱是在循环之前实例化的)?还是有其他原因?

更新

我意识到,如果我删除所有代码并开始在循环中逐行添加每一行,那么 imgName 变量实际上就已定义。看来无论出于何种原因,当回调函数内抛出错误时,它就会变得未定义。这很困难,因为它似乎掩盖了实际的错误并阻碍了调试。这是控制台中的错误:

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)

最佳答案

不存在诸如取消设置变量的错误或弄乱它们的神秘函数调用之类的事情,除非它们确实改变了它们的值。

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

关于javascript - 数组中的每个项目都是未定义的......即使它不是(Node.js - 沙盒脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31933185/

相关文章:

javascript - Bootstrap 日期时间选择器显示

javascript - 将 Ideal 与 stripe 集成到 Node.js 中

node.js - 使用 Azure Node SDK 获取应用程序设置

javascript - Ionic 3 JavaScript 堆内存不足

javascript - Socket.IO - 如何替换客户端上的事件监听器

javascript - 我对两件事感到困惑。为什么需要调用 ComponentWillUnmount 和 removeEventListener 才能正常工作

javascript - 通过特快专递问题向多个收件人发送电子邮件

javascript - 使用长间隔的 javascript setInterval 有什么缺点吗?

node.js - 使用 NCONF 捕获命令行参数

javascript - 如何从实际上是日期格式的数字总和中获取一位数字 (15-06-2015)