2016-11-29 62 views
0

我想构建一个小电子应用程序。它从用户那里获取文件/文件,然后将它们复制到特定文件夹,并将有关该文件的所有信息添加到数据库。变量给我错误的值里面的函数内循环

const fs = require('fs-extra') 
//sample 2 file entry 
files = {"0":{"name":"File1.png","path":"A:\\User Folders\\Desktop\\File1.png"},"1":{"name":"File2.jpg","path":"A:\\User Folders\\Desktop\\File2.jpg"},"length":2} 
window.$ = window.jQuery = require('jquery'); 

jQuery.each(files, function(file) { 
    //this is just one of many variables I need 
    currentfile = files[file].path 
    fs.copy(currentfile, "./files/"+"."+files[file].name, function (err) { 
     if (err) { 
      console.log(err) 
     } else { 
      console.log(currentfile); 
      //I expect this to log file1 then file2 so I can submit it to my database, 
      //but it always logs file2 

     } 
    }) 
}); 

它工作正常的一个文件的时间,但是当我尝试处理多于一个,因为我希望它(复制文件,更新DOM,复制下一个文件时,它不工作,更新DOM等)。

回答

1

我想你可能想要本地的时候不小心声明了一个全局范围的变量。

更改此:

currentfile = files[file].path 

这样:

var currentfile = files[file].path 

这将形成一个closure在匿名函数处理该错误将能够访问匿名函数的currentfile变量处理jquery each

+2

*“这将形成一个封闭......”*这*不会*形成封闭。它*将*在当前词法环境而不是全局环境中声明变量。函数声明是创建词汇环境或“闭包”的原因。另外,w3schools可能不是最好的参考。 –

+0

谢谢,我不知道有这么多的差异(这里仍然是一个noob)。我没有得到的是即使这是创建一个全局变量,为什么它不起作用。我会假设对于每个文件,它会将变量更改为当前文件,用它来做东西,然后在下一个文件中再次更改,等等。我正在阅读使用vs vs vs不是,试图理解它,但如果你能解释事情出了什么问题,那将是非常有用的。 –

+0

它是异步的。当你的错误处理程序被调用时,'each'循环可能已经移到其他记录上,以错误处理程序不期望的方式更新'currentFile'变量。 –