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等)。
*“这将形成一个封闭......”*这*不会*形成封闭。它*将*在当前词法环境而不是全局环境中声明变量。函数声明是创建词汇环境或“闭包”的原因。另外,w3schools可能不是最好的参考。 –
谢谢,我不知道有这么多的差异(这里仍然是一个noob)。我没有得到的是即使这是创建一个全局变量,为什么它不起作用。我会假设对于每个文件,它会将变量更改为当前文件,用它来做东西,然后在下一个文件中再次更改,等等。我正在阅读使用vs vs vs不是,试图理解它,但如果你能解释事情出了什么问题,那将是非常有用的。 –
它是异步的。当你的错误处理程序被调用时,'each'循环可能已经移到其他记录上,以错误处理程序不期望的方式更新'currentFile'变量。 –