[問題] node.js迴圈讀取檔案問題

看板Ajax作者 (魯蛇王)時間8年前 (2016/05/17 13:49), 8年前編輯推噓4(4013)
留言17則, 7人參與, 最新討論串1/1
hi 各位大大好 小魯想用node.js弄個for迴圈幫我讀取xlsx檔(用node-xlsx套件) 但是遇到一點小問題 就是file_path 總是拿到迴圈的最後一個數字 例如: i=100 不知道該如何修正我的程式才能正確的讀取每一個檔案? for(var i=1; i<=100;i++){ file_path = i+'.xlsx'; // 檔名 check_file(file_path, function(back){ //確認檔案存在 console.log(file_path); if( back.status == 1){ load_xlsx(back.path, function(data){ // 檔案存在 讀取xlsx report[data[0]] = data[1]; count++; if(count > 100){ console.log(report); } }); } }); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.162.162 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1463464158.A.591.html ※ 編輯: jikker (219.87.162.162), 05/17/2016 13:49:47

05/17 14:57, , 1F
(function(file_path){check_file(...)})(file_path);
05/17 14:57, 1F

05/18 00:34, , 2F
能否提供check_file()的程式碼?
05/18 00:34, 2F

05/18 00:38, , 3F
大大可以說的詳細一點嗎? 或者該用什麼關鍵字去搜尋?
05/18 00:38, 3F

05/18 10:22, , 4F
呼叫check_file時傳進去時的file_path是正確的
05/18 10:22, 4F

05/18 10:22, , 5F
我猜back.path也是正確的,你可以把它console.log出來看看
05/18 10:22, 5F

05/18 13:04, , 6F
用WHILE? 讀取完後 再i=i+1 ?
05/18 13:04, 6F

05/18 13:15, , 7F
只推一樓
05/18 13:15, 7F

05/19 00:45, , 8F
我用1F大大的方式 成功了 可是我不懂原理@@
05/19 00:45, 8F

05/19 00:45, , 9F
back.path是錯的 因為一開始拿到的file_path就是錯的
05/19 00:45, 9F

05/19 02:08, , 10F
function scope, closure看ㄧ下
05/19 02:08, 10F

05/19 07:25, , 11F
也可以用 (let i=0; ....)
05/19 07:25, 11F

05/19 10:45, , 12F

05/19 10:45, , 13F
check_file收到的file_path是正確的
05/19 10:45, 13F

05/19 10:46, , 14F
假如back.path有錯,表示問題是出在check_file裡面
05/19 10:46, 14F

05/29 20:52, , 15F
因為讀檔案是非同步的 當你迴圈跑完以後才會開始讀
05/29 20:52, 15F

05/29 20:52, , 16F
所以你的function裡面拿到的檔名永遠是最後一個
05/29 20:52, 16F

05/29 20:53, , 17F
寫js在loop裡面包function就要特別小心這種事情
05/29 20:53, 17F
文章代碼(AID): #1NEh3UMH (Ajax)
文章代碼(AID): #1NEh3UMH (Ajax)