无法在函数外调用变量?

时间:2015-04-26 23:54:19

标签: javascript node.js

我正在处理node.js脚本,我无法在函数外部调用变量。 File.name在engine.on ready函数内完美地工作,但在engine.on idle函数中不起作用。

engine.on('ready', function () {
  engine.files.forEach(function (file) {
    io.emit('chat message', "downloading " + file.name); 
    file.select()
  })

  engine.on('idle', function () {
    io.emit('chat message',"files '" + file.name + "' downloaded");
  });
});

如何使file.name成为可在所有函数中使用的全局变量?

4 个答案:

答案 0 :(得分:0)

请使用:

global['fileName'] = file.name;

或将整个文件设置为globaly:

global['file'] = file;

答案 1 :(得分:0)

变量文件在forEach循环中调用的函数中定义,它引用单个文件。我想你想要做的是循环浏览引擎空闲时下载的文件。您可能还需要添加一些标记或保留已打印文件的索引,并仅打印自最近空闲以来下载的文件。但是,这是一个示例,您可以输出引擎空闲时已下载的所有文件。

<label ng-click="confirmChange($event)"><input type="radio" ng-model="value" value="foo" ></label>

$scope.confirmChange = function(event) {
  if(!confirm('sure?')) {
    event.preventDefault();
  } 
};

答案 2 :(得分:0)

ready函数中,您在每个文件上进行迭代,而在idle中,您尝试只访问一个文件,这似乎是导致错误的原因。我认为正确的不是只访问一个,而是访问所有文件。看起来应该是这样的:

engine.on('ready', function () {
  engine.files.forEach(function (file) {
    io.emit('chat message', "downloading " + file.name); 
    file.select()
  }
});

engine.on('idle', function () {
  engine.files.forEach(function (file) {
    io.emit('chat message', "files '" + file.name + "' downloaded); 
  }
});

答案 3 :(得分:-1)

您的engine.on('idle', function () {函数无法访问file对象,因为file对象仅存在于forEach循环内。您需要查看传递给engine.on('idle')的参数,以查看可用的参数。