2016-11-29 63 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'變量。 –